队列也是数据结构中比较重要的一种,和栈相反的是,队列是先进先出的,先进队列的可以先出队,跟平时我们排队是一样的。在允许多通道程序运行的计算机系统中,同时几个作业运行。凡是申请输出的作业都从队尾进入队列。
现在用链表实现队列,先定义一个链表结点:
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<<" "; } }
测试结果为:
时间: 2024-10-03 13:45:15