队列的实现:链式队列
来源:互联网 发布:nvh分析软件 编辑:程序博客网 时间:2024/04/29 23:49
队列常常也使用链式存储的方式来实现。为了方便操作,同顺序存储一样,我们要维护一个头指针和一个尾指针。如下图:
在链式队列中显然不会出现假溢出的情况。但在出队时,要及时释放内存。由于在队列的实现:顺序队列中,对队列的描述已经很清楚了。就闲话不多说,直接上代码:
类定义和类实现
#include<iostream>#include<iomanip>using namespace std;typedef int ELemType;class QNode //节点类型 {public:ELemType data;QNode *next;QNode(ELemType v, QNode*p=NULL):data(v),next(p){};};class LinkQueue //链式队列 {private:int size;QNode *front; //头指针 QNode *rear; //尾指针 public:LinkQueue(); //默认构造方法 ~LinkQueue(); //析构 int getSize(); //链表大小 bool getFront(ELemType&); //获取头节点 bool getRear(ELemType&); //获取尾节点bool empty(); //队列是否为空 void clear(); //清空链表 void enQueue(ELemType); //入队 void deQueue(); //出队 void queueTraverse(); //队列遍历 };//类实现LinkQueue::LinkQueue(){front=rear=NULL;size=0;}LinkQueue::~LinkQueue(){clear();} int LinkQueue::getSize(){return size;}bool LinkQueue::getFront(ELemType &item){if(front){item=front->data;return true;}cout<<"空队列!"<<endl;return false;}bool LinkQueue::getRear(ELemType &item){if(rear){item=rear->data;return true;}cout<<"空队列!"<<endl;return false;}bool LinkQueue::empty(){return size==0;}void LinkQueue::clear(){if(front){QNode *q,*p=front;while(p){q=p->next;delete p;p=q;}}rear=NULL; //这一句,不能忘了 size=0;}void LinkQueue::enQueue(ELemType data){if(front){rear->next=new QNode(data,NULL);rear=rear->next;}else{front=rear=new QNode(data,NULL);}size++;}void LinkQueue::deQueue(){if(front){QNode* p=front;front=front->next;delete p;size--;}}void LinkQueue::queueTraverse(){if(front){QNode *p=front;while(p){cout<<setw(4)<<p->data;p=p->next;}cout<<endl;}elsecout<<"队列为空!"<<endl;}主函数
int main(){cout<<"链式队列演示"<<endl;LinkQueue queue;ELemType item;cout<<"入队,输入0结束:";while(cin>>item && item)queue.enQueue(item);cout<<"遍历"<<endl;queue.queueTraverse();if(queue.getFront(item))cout<<"获取队头元素:"<<item<<endl;if(queue.getRear(item))cout<<"获取队尾元素:"<<item<<endl;cout<<"队头出队!"<<endl;queue.deQueue();cout<<"遍历"<<endl;queue.queueTraverse();queue.clear();cout<<"清空队列后,是否为空:";if(queue.empty())cout<<"Yes!"<<endl;elsecout<<"No!"<<endl;system("pause");return 0;}运行:
完整代码下载:队列的实现:链式队列
专栏目录看这里:
- 数据结构与算法目录
- c指针
1 0
- 队列的实现:链式队列
- 链式队列的实现
- 链式队列的实现
- 链式队列的实现
- 链式队列的实现。
- 链式队列的实现
- 链式队列的实现
- 链式队列的实现
- 队列的链式实现
- 链式队列的实现
- 链式队列的实现
- 链式队列的实现
- 链式队列的实现
- 链式队列的实现
- 链式队列的实现
- 链式队列的实现
- 队列的链式实现
- 队列的链式实现
- 从相册,相机拍照,并对图片进行剪裁
- Python 学习之类(Class)
- libcurl 接口调用方式
- 应用 Valgrind 发现 Linux 程序的内存问题
- 浅谈MVC
- 队列的实现:链式队列
- jquery,Struts,json 登录验证实例
- 普林斯顿公开课 算法4-4:优先级队列的应用
- linux网卡命令,网卡绑定
- JSP 页面中用绝对路径显示图片
- hdu3045之斜率DP
- Choose a destination with a supported architecture in order to run on this device.
- leetcode: Longest Consecutive Sequence
- cloustack系统虚拟机密码-备记一下免得忘了