队列的实现:链式队列

来源:互联网 发布: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