#include<stdio.h>
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int QElemType;
typedef struct QNode
{//队列的链式存储结构
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front; //队头指针
QueuePtr rear; //队尾指针
}LinkQueue;
Status InitQueue (LinkQueue &Q) {
// 构造一个空队列Q
/********** Begin **********/
Q.front=Q.rear=new QNode;
Q.front->next=NULL;
return OK;
/********** End **********/
}
Status DestroyQueue (LinkQueue &Q) {
// 销毁队列Q
/********** Begin **********/
QNode *p=new QNode;
QNode *r=new QNode;
p=Q.front;
r=Q.front->next;
while(r!=NULL){
free(p);
p=r;
r=r->next;
}
free(p);
return OK;
/********** End **********/
}
int EmptyQueue(LinkQueue Q)
{//判断队列是否为空,空返回1,否则返回0
/********** Begin **********/
return(Q.front==Q.rear);
/********** End **********/
}
Status EnQueue (LinkQueue &Q, QElemType e) {
// 插入元素e为Q的新的队尾元素
/********** Begin **********/
QNode *p=new QNode;
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
/********** End **********/
}
Status DeQueue (LinkQueue &Q, QElemType &e) {
// 若队列不空,则删除Q的队头元素,
//用 e 返回其值,并返回OK;否则返回ERROR
/********** Begin **********/
if(Q.front==Q.rear) return ERROR;
QNode *p=new QNode;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;
delete p;
return OK;
/********** End **********/
}
int main()
{
int n,m;
QElemType e;
LinkQueue Q;
while(cin>>n>>m)
{
if(n==0&&m==0) break;
InitQueue (Q);//初始化一个带头结点的链队列
while(n--)
{
cin>>e;
EnQueue(Q,e);
}
while(m--)
{
DeQueue(Q,e);
cout<<e<<" ";
}
if(EmptyQueue(Q))
cout<<"0"<<endl;
else
cout<<"1"<<endl;
}
DestroyQueue(Q);
return 0;
}
10-04
3717
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
10-10
1356
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
11-21
1988
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
07-08
7786
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交