`
bulote
  • 浏览: 1305352 次
文章分类
社区版块
存档分类
最新评论

实训C++语言设计——STL链表、栈类、队列

 
阅读更多

目的:了解了链表的定义与实现,学会了其使用方法;了解了栈类的定义和实现,学会了其使用方法;了解了队列的定义和实现,学会其使用方式;了解了c++标准模板库STL的使用方式.

内容

程序:
//Lab9_2.cpp


//linkedlist.h
#include<malloc.h>
#ifndef LINKEDLIST_CLASS
#define LINKEDLIST_CLASS
#include <iostream>
#include <cstdlib>
using namespace std;
#ifndef NULL
const int NULL = 0;
#endif // NULL
template <class T>
class LNode
{private:
public:
T num;
LNode<T> *_next;
};
template <class T>
class LinkList
{ private:
public:
LNode<T> *_head;
int _len;
LNode<T> *initList(void)// 建立一个带头节点的空链表的函数
{LNode<T> *h;
h=(LNode<T> *)malloc(sizeof(LNode<T>));
h->num=0;// 头节点的指数赋值为-1
h->_next=NULL;
return h;}
void CreatPolyn(LinkList<T> p,int m,T j);//创建链表};
template <class T>
void LinkList<T>::CreatPolyn(LinkList<T> p,int m,T j)//创建链表
{ LNode<T> *h,*e,*q;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
h=p.initList();//创建一个带头节点的空链表
q=e=h;
p._head=h;
p._len=m;
for(int i=1;i<=m;++i)
{cout<<"请输入第"<<i<<"项的数:";// 输入数
cin>>j;
e=(LNode<T> *)malloc(sizeof(LNode<T>));
e->num=j;// 把新节点插入到链表中
e->_next=NULL;
q->_next=e;
q=q->_next;}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
h=p._head;//显示构建的链表节点中的数值
e=h->_next;
int i1=1;
while(e)
{cout<<"链表中节点"<<i1<<"中存储的值是"<<endl;
cout<<e->num<<endl;
m--;
e=e->_next;
i1++;}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
e=q=p._head;// 使用循环释放链表中每个节点的内存空间
int i2=0;
while(p._len+1)
{ q=q->_next;
cout<<"释放"<<i2<<"节点!"<<endl;
free(e); //释放链表中节点的内存空间
e=q;
p._len--;
i2++;}// 释放链表中节点的内存空间
}#endif
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//queue.h
#ifndef QUEUE_CLASS
#define QUEUE_CLASS
#include <iostream>
#include <cstdlib>
using namespace std;
#ifndef NULL
const int NULL = 0;
#endif // NULL
#include "linkedlist.h"
template <class T>
class Queue
{ private:
T j0;
int m0;
public:
void CreatQueue(int m,T j)//创建
{ j0=j;
m0=m;
LinkList<T> L;
L.CreatPolyn(L,m0,j0);
};
//成员函数的实现
#endif
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Lab9_2
#include"queue.h"
void main()
{int n;
n1:cout<<"====================================="<<endl;
cout<<" **输入类型的菜单**"<<endl<<endl;
cout<<"1.int型 2.float型 "<<endl<<"3.double型 4.char型"<<endl;
cout<<"====================================="<<endl;
cout<<"请选择你的输入类型:";
int k1; cin>>k1;
cout<<"请输入你要输入的个数:";
cin>>n;
switch(k1)
{
case 1:int j1;
Queue<int> L1;
L1.CreatQueue(n,j1);
cout<<"====================================="<<endl;
cout<<"你的操作选项有:"<<endl<<"1.继续操作 2.结束操作"<<endl;
cout<<"====================================="<<endl;
int m1; cout<<"请输入你的选择:"; cin>>m1;
if(m1==1) goto n1;
else break;
case 2:float j2;
Queue<float> L2;
L2.CreatQueue(n,j2);
cout<<"====================================="<<endl;
cout<<"你的操作选项有:"<<endl<<"1.继续操作 2.结束操作"<<endl;
cout<<"====================================="<<endl;
int m2; cout<<"请输入你的选择:";
cin>>m2;
if(m2==1) goto n1;
else break;
case 3:double j3;
Queue<double> L3;
L3.CreatQueue(n,j3);
cout<<"====================================="<<endl;
cout<<"你的操作选项有:"<<endl<<"1.继续操作 2.结束操作"<<endl;
cout<<"====================================="<<endl;
int m3; cout<<"请输入你的选择:";
cin>>m3;
if(m3==1) goto n1;
lse break;
case 4:char j4;
Queue<char> L4;
L4.CreatQueue(n,j4);
cout<<"====================================="<<endl;
cout<<"你的操作选项有:"<<endl<<"1.继续 2.结束操作"<<endl;
cout<<"====================================="<<endl;
int m4; cout<<"请输入你的选择:";
cin>>m4;
if(m4==1) goto n1;
else break;
default:
cout<<"你的输入不合法!请重新选择!"<<endl;
goto n1;
break;
}
}
//Lab9_3.cpp
#include <iostream>
#include <deque>
using namespace std ;
int main()
{int n;cout<<"请输入你要输入的个数:";
cin>>n;
deque<int> d;//构造一个队列用于存放整数
int key, item;
for(int i=0;i <n;i++)// 输入n个整数依次向队列插入
{cout<<"输入第"<<i+1<<"个值"<<endl;
cin>>item;
d.push_back(item); //实现插入前一个数的后面的功能数值
//d.push_front(item); //实现插入前一个数的前面的功能数值}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
cout<<"输入的队列是:"; // 输出队列
deque<int>::iterator p=d.begin();
while(p!=d.end()) //输出数据,直到队列尾
{ cout <<*p << " ";
p++; }
cout<<endl<<"队列长度是"<<d.size()<<endl; //输出队列长度
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
d.pop_front(); //实现删除队列第一个值
//d.pop_back(); //实现删除队列最后一个值
cout<<"用pop_front()删除第一个数后的队列是:"; // 输出队列
deque<int>::iterator p1=d.begin();
while(p1!=d.end()) //输出各数据,直到队列尾
{
cout <<*p1 << " ";
p1++;
}
cout<<endl<<"队列长度是"<<d.size()<<endl; //输出队列长度
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
cout<<"d.empty()显示是"<<d.empty()<<endl; //实现访问???
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
return 0;
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics