队列也是数据结构中比较重要的一种,和栈相反的是,队列是先进先出的,先进队列的可以先出队,跟平时我们排队是一样的。在允许多通道程序运行的计算机系统中,同时几个作业运行。凡是申请输出的作业都从队尾进入队列。
现在用链表实现队列,先定义一个链表结点:
typedef struct QNode
{
int data;
QNode *next;
}QNode,*QueuePtr;
给队列定义一个头结点结构体,结构体中包含着两个链表结点指针,第一个指针指向对象的头结点,第二个指针指向对象的尾结点:
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
下面编写初始化队列:
bool InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=NULL;
return true;
}
下面是压入数据的代码,数据被从队尾压入:
bool EnQueue(LinkQueue &Q,int e)
{
if(Q.front==NULL)
{
Q.front=new QNode;
Q.front->data=e;
Q.front->next=NULL;
Q.rear=Q.front;
return true;
}
QueuePtr temp=new QNode;
temp->data=e;
temp->next=NULL;
Q.rear->next=temp;
Q.rear=temp;
return true;
}
然后给出从对头出队的代码,数据从对头取出:
bool DeQueue(LinkQueue &Q,int &e)
{
if(Q.front==NULL) return false;
if(Q.front==Q.rear)
{
e=Q.front->data;
delete Q.front;
Q.front=NULL;
Q.rear=NULL;
return true;
}
QueuePtr p=Q.front;
e=p->data;
Q.front=p->next;
delete p;
return true;
}
下面编写测试代码:
void main()
{
LinkQueue L;
InitQueue(L);
cout<<"please input 5 integers: ";
int x=0;
for(int i=0;i<5;i++)
{
cin>>x;
EnQueue(L,x);
}
cout<<"out of queue: ";
while(L.front!=NULL)
{
DeQueue(L,x);cout<<x<<" ";
}
}
测试结果为: