您的位置:首页 > 编程语言 > C语言/C++

链队列的实现,C++代码实现

2010-10-12 20:30 405 查看
/*链队列的实现*/
#include <iostream>
using namespace std;
 
/*链队列类型定义*/
typedef struct QNode
{
       struct QNode * next;
       char data;
}QNode,*queuePtr;//结点的定义
 
typedef struct linkQueue
{
       queuePtr rear;
       queuePtr front;
}linkQueue;//队列的定义
 
/*链队列的初始化*/
void initQueue_L(linkQueue &Q)
{
       Q.front=Q.rear=new QNode;//为队列申请一个空间
       Q.front->next=0;//使队列的头指针指向空
}
 
 
/*销毁链队列*/
void destroyQueue_L(linkQueue &Q)
{
       while(Q.front)
       {
              queuePtr p;
              p=Q.front;
              Q.front=Q.front->next;
              delete p;//销毁链队列得把结点一个一个销毁掉
       }
}
 
/*求链队列的长度*/
int lengthQueue_L(linkQueue &Q)
{
       QNode *p;
       int count;
       p=Q.front->next;
       count=1;
       while(p)
       {
              p=p->next;
              count++;
       }
       return count;
}
 
/*入队*/
void enterQueue_L(linkQueue &Q,char x)
{
       QNode *p;
       p=new QNode;
       p->data=x;
       p->next=0;
Q.rear->next=p;/*这里和顺序队列不一样,此处的rear不是指向队列最后一个元素的下一个位置,而就是指向队列的最后一个元素。要知道Q.rear和Q.front都是指针。*/
       Q.rear=p;
}//这里没有队满的情况。
 
/*出队*/
char outputQueue_L(linkQueue &Q)
{
       char x;
       if(Q.front->next==0)//这里得考虑队列空的情况。
              cout<<"Queue Empty!"<<endl;
       QNode *p;
       p=Q.front->next;/*应该注意顺序队列和链队列的不同之处,链队列中rear指向最后一个元素,front指向头结点,即第一个结点的前一个结点。而在顺序队列中正好相反,rear指向队列中的最后一个元素的下一个位置,而front就是指向第一个结点。*/
       x=p->data;
       Q.front->next=p->next;
       if(Q.rear==p)
              Q.rear=Q.front;
       delete p;
       return x;
}
 
void main()
{
       linkQueue Q;
       initQueue_L(Q);
       enterQueue_L(Q,'a');
       enterQueue_L(Q,'b');
       enterQueue_L(Q,'c');
       enterQueue_L(Q,'d');
       cout<<outputQueue_L(Q)<<endl;
       cout<<outputQueue_L(Q)<<endl;
       cout<<outputQueue_L(Q)<<endl;
       cout<<outputQueue_L(Q)<<endl;
       //cout<<outputQueue_L(Q)<<endl;
       destroyQueue_L(Q);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ struct delete c