//
循环队列(链表实现).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;
}