// 循环队列(链表实现).cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
using namespace std;
struct d_Queue
{
d_Queue *next,*prior;
int data;
};
d_Queue *initQueue()//初始化队列
{
d_Queue * q = new d_Queue;
q->prior = q->next = q;//为空时头结点的prior和next都指向头结点
return q;
}
void enQueue(d_Queue * q,int data)//入队
{
d_Queue *s = new d_Queue;
s->data = data;
q->prior->next = s;//尾结点next指针指向s
s->prior = q->prior;//s结点的prior指针指向之前尾结点
s->next = q;//s的next指针指向指向头结点
q->prior = s;//头结点的prior指针指向s
}
void deQueue(d_Queue *q)//出队
{
if(q->prior == q)
{
cout<<"队列为空,出队失败!"<<endl;
return;
}
d_Queue *s = new d_Queue;
s = q->next;//这里的程序采用头指针指向头结点的方式,所以这里s表示队头
cout<<s->data<<"出队"<<endl;
q->next = s->next;//头结点next指向队头的next指针
s->next->prior = q;//队头的next指针的prior指针指向头结点
free(s);//释放队头指针
}
int _tmain(int argc, _TCHAR* argv[])
{
d_Queue *q = initQueue();
enQueue(q,1);
enQueue(q,2);
deQueue(q);
//cout<<q<<endl;
enQueue(q,3);
deQueue(q);
deQueue(q);
enQueue(q,4);
deQueue(q);
return 0;
}