队列,是一种先进先出的线性表,它只允许在队头删除,在队尾插入,链式队列和单链表操作类似,但是有队首指针和队尾指针,下面是链式队列的表示和实现:
#include <iostream>
using namespace std;
//队列的链式表现与实现
struct QNode
{
int data;
QNode *next;
};
struct LinkQueue
{
QNode * front;
QNode * rear;
};
bool InitQueue(LinkQueue &q)
{
q.front=q.rear=(QNode*)malloc(sizeof(QNode));
if (!q.front)
{
return false;
}
q.front->next=NULL;
return true;
}
bool DestoryQueue(LinkQueue &q)
{
while(q.front)
{
q.rear=q.front->next;
free(q.front);
q.front=q.rear;
}
return true;
}
//插入元素e 队尾元素
bool EnQueue(LinkQueue &q,int e)
{
QNode *p=(QNode*)malloc(sizeof(QNode));
if (!p)
{
return false;
}
p->data=e;
p->next=NULL;
q.rear->next=p;
q.rear=p;//队尾指针需要移到最后
return true;
}
bool DeQueue(LinkQueue &q,int &e)
{
if (q.front==q.rear)
{
return false;
}
QNode *p = q.front->next;
e=p->data;
q.front->next=p->next;
if (q.rear==p)//队尾指针不能丢 需要指向头结点
{
q.rear=q.front;
}
free(p);
return true;
}
void PrintQueue(LinkQueue &q)
{
if (q.front==q.rear)
{
cout<<"sorry ,the queue is empty"<<endl;
return;
}
cout<<"Now print the queue:"<<endl;
QNode *p=NULL;
p=q.front->next;
while(p)
{
cout<<p->data<<endl;
p=p->next;
}
}
void main()
{
LinkQueue lq={0};
if (InitQueue(lq))
{
cout<<"Initial Success!"<<endl;
}
int ElemNum=0;
cout<<"请输入要插入元素的个数:";
cin>>ElemNum;
int Elem=0;
for (int i=0;i<ElemNum;i++)
{
cout<<"请输入要插入第 "<<i+1<<" 个元素:";
cin>>Elem;
if (EnQueue(lq,Elem))
{
cout<<"插入成功"<<endl;;
}
}
PrintQueue(lq);//打印队列
int delnum;
DeQueue(lq,delnum);//删除第一个元素
cout<<"the delete num is :"<<delnum<<endl;
PrintQueue(lq);//打印队列
DestoryQueue(lq);//销毁队列
PrintQueue(lq);//打印队列
}
执行结果如下图:
原文:http://www.cnblogs.com/mu-tou-man/p/3899571.html