队列的链式存储结构可以创建一个头结点,一个指向头结点的指针front,一个指向尾节点的指针rear。添加一个节点的时候将rear指向新节点,取一个节点的时候将front指向下个节点的下一个节点。
// 队列链式存储.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
struct link
{
int data;
struct link *next;
};
struct queue
{
struct link *front;
struct link *rear;
};
void init(queue *q)
{
link *head=new link;
head->data=NULL;
head->next=NULL;
q->front=head;
q->rear=q->front;
}
void push(queue *q,int e)
{
link *node=new link;
node->data=e;
if(q->front->next==NULL)
{
link *head=q->front;
head->next=node;
q->rear=node;
}
else
{
q->rear->next=node;
q->rear=node;
q->rear->next=NULL;
}
}
int pop(queue *q)
{
int data=-1;
if(q->front->next!=NULL&&q->front->next!=q->rear)
{
data=q->front->next->data;
q->front->next=q->front->next->next;
}
else if(q->front->next==q->rear)
{
data=q->front->next->data;
q->front->next=NULL;
}
return data;
}
int _tmain(int argc, _TCHAR* argv[])
{
queue q;
init(&q);
push(&q,1);
push(&q,2);
push(&q,3);
cout<<pop(&q)<<endl;
cout<<pop(&q)<<endl;
cout<<pop(&q)<<endl;
push(&q,1);
push(&q,2);
cout<<pop(&q)<<endl;
cout<<pop(&q)<<endl;
cout<<pop(&q)<<endl;
return 0;
}