BJFU_数据结构习题_246基于循环链表的队列的基本操作

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43722827/article/details/102755285

246基于循环链表的队列的基本操作

描述
用带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(不设头指针)。实现该队列的入队出队以及判断队列是否为空操作。
输入
多组数据,每组数据有两行。第一行为两个整数n和m,n表示入队序列A的长度(n个数依次连续入队,中间没有出队的情况),m表示出队序列B的元素数量(m个数依次连续出队,中间没有入队的情况)。第二行为序列A(空格分隔的n个整数)。当n和m都等于0时,输入结束。
输出
对应每组数据输出一行。每行包括m+1个整数,前m个数代表出队序列B的各个整数,最后一个整数表示队列是否为空,队列为空输出0,不为空输出1。整数之间用空格分隔。
输入样例 1
5 3
1 3 5 3 6
4 4
-1 2 3 4
0 0
输出样例 1
1 3 5 1
-1 2 3 4 0

#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct LNode
{
	int data;
	struct LNode *next;
}LNode,*Queue;
void InitQueue(Queue &Q)
{
	Q=new LNode;
	Q->next=Q;
}
void Push(Queue &Q,int e)
{
	Queue p=new LNode;
	p->data=e;
	p->next=Q->next;
	Q->next=p;
	Q=p;
}
void Pop(Queue &Q)
{
	Queue q=Q->next->next;
	cout<<q->data<<" ";
	Q->next->next=q->next;
	if(q==Q)
		Q=Q->next;
	delete q;
}
int IsEmpty(Queue Q)
{
	return Q->next==Q?1:0;
}
int main()
{
	int n,m;
	while(cin>>n>>m&&n!=0&&m!=0)
	{
		Queue Q;
		InitQueue(Q);
		while(n--)
		{
			int e;cin>>e;
			Push(Q,e);
		}
		while(m--)
			Pop(Q);
		if(IsEmpty(Q))
			cout<<"0"<<endl;		
		else
			cout<<"1"<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43722827/article/details/102755285
今日推荐