C++单链表实现队列
//lian biao shi xian dui lie
#include "iostream"
#include "stdlib.h"
typedef int datatype;
using namespace std;
//datatype 链表的单个节点
typedef struct node
{
datatype data;
struct node *next;
}qnode,*pQnode;
//整个队列的入口,其中含有两个分别指向头和尾的指针
typedef struct
{
pQnode front,rear;
}linkQueue,*pLinkQueue;
//initlicize linkqueue初始化队列
pLinkQueue init_Linkqueue(){
pLinkQueue q=(pLinkQueue)malloc(sizeof(linkQueue));
if(q){
q->front=NULL;
q->rear=NULL;
}
return q;
}
//is empty判断链表是否为空
int is_LinkQueue_empty(pLinkQueue q){
if (q&&q->front==NULL&&q->rear==NULL)
return 1;
return 0;
}
//in linkqueue入队列
int in_linkQueue(pLinkQueue q,datatype d){
pQnode p=(pQnode)malloc(sizeof(pQnode));
p->data=d;
p->next=NULL;
if(!p){
return 0;
}
if(is_LinkQueue_empty(q)){
q->front=q->rear=p;
}else{
q->rear->next=p;
q->rear=p;
}
return 1;
}
//out linkqueue出队列
int out_LinkQueue(pLinkQueue q,datatype &d){
pQnode p;
if (is_LinkQueue_empty(q))
{
return 0;
}else{
p=q->front;
d=p->data;
q->front=q->front->next;
free(p);
if (!q->front)
{
q->rear=NULL;
}
return 1;
}
}
//Destroy_LinkQueue销毁链表
void Destroy_LinkQueue(pLinkQueue q){
datatype d;
while(out_LinkQueue(q,d)){}
free(q);
q=NULL;
}
int main(int argc, char const *argv[])
{
pLinkQueue q=init_Linkqueue();
for(int i=0;i<10;i++)
{
in_linkQueue(q,i);
}
for (int i = 0; i < 15; ++i)
{
int d;
if(out_LinkQueue(q,d))
cout<<d<<endl;
else cout<<"empty."<<endl;
}
Destroy_LinkQueue(q);
return 0;
}