描述
假设将循环队列定义为:以与变量rear和length分别指示循环队列中队尾元素的位置和内含元素的个数。试给出此循环队列的队满条件,并写出相应的入队列和出队列的算法(在出队列的算法中要返回队头元素)。
输入
先输入一个不大于100的正整数n(输入数据个数)和m(循环队列数组的大小),再输入n个整数,其中输入0表示出队。
输出
要求用循环队列实现,队满时如有入队则输出"No"并丢掉此元素,出队时输出这个元素。注意:这种表示方法队列中可以存储m个元素!
输入样例
10 5
2 6 0 56 89 34 2322 25 0 10
2 6 0 56 89 34 2322 25 0 10
输出样例
2
No
6
No
6
#include <iostream>
#include <cstdio>
#include <stdlib.h>
using namespace std;
typedef int DataType;
struct Node
{
DataType info;
struct Node *next;
};
typedef struct Node Node, *PNode;
struct LinkQueue
{
PNode front, rear;
};
typedef struct LinkQueue LinkQueue, *PLinkQueue;
PLinkQueue createEmptyQueue()
{
PLinkQueue plqu;
plqu = (PLinkQueue)malloc(sizeof(LinkQueue));
if(plqu!=NULL)
plqu->front = plqu->rear = NULL;
else
printf("Create Error:Out of space!\n");
return plqu;
}
bool isEmptyQueue(PLinkQueue plqu)
{
return (plqu->front == NULL);
}
void push(PLinkQueue plqu, DataType x)
{
PNode p;
p = (PNode)malloc(sizeof(Node));
if(p == NULL)
printf("Push Error: Out of space\n");
else
{
p->info = x;
p->next = NULL;
if(plqu->front == NULL)
{
plqu->front = p;
plqu->rear = p;
}
else
{
plqu->rear->next = p;
plqu->rear = p;
}
}
}
void pop(PLinkQueue plqu)
{
PNode p;
if(plqu->front == NULL)
printf("Pop Error: Empty queue\n");
else
{
p = plqu->front;
plqu->front = plqu->front->next;
free(p);
}
}
int main()
{
int m, n;
cin >> m >> n;
PLinkQueue q = createEmptyQueue();
int cnt = 0;
for(int i = 0; i < m; i ++)
{
int elem;
cin >> elem;
if(elem == 0)
{
printf("%d\n", q->front->info);
pop(q);
cnt--;
}
else
{
if(cnt == n)
cout << "No" << endl;
else
{
push(q, elem);
cnt ++;
}
}
}
return 0;
}