首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

循环队列-跪求帮助!该怎么处理

2012-04-14 
循环队列---跪求帮助!!!问题描述如果希望循环队列中的元素都能得到利用,则需设置一个标志域tag,并以tag的

循环队列---跪求帮助!!!
问题描述 
如果希望循环队列中的元素都能得到利用,则需设置一个标志域tag,并以tag的值为0或1来区分尾指针和头指针相同时的队列状态是“空”还是“满”。
试编写与此结构相应的入队算法和出队算法。

输入数据有多组:
一行包含两个整数S,M,表示循环队列中数组的大小S和一共进行了M次操作。
接下来有M行
以下M行每行格式为以下几种:
IN X 表示 入队 一个数据X
OUT 表示出队
0<S<100,0<M<100

输出为一行。
当IN成功时输出“Succes“
如果队列插入时,即队列已满,输出”The queue is full"
当OUT成功时,直接输出队列的元素
否则,输出“The queue is empty"
具体见样例

输入样列 
3 9
IN 1
IN 2
IN 3
IN 4
OUT
OUT
OUT
OUT
OUT输出样例 
Success
Success
Success
The queue is full
1
2
3
The queue is empty
The queue is empty


小弟的代码:
#include<stdio.h>
#include<malloc.h>
#include<string.h>

#define MAXSIZE 100
typedef struct
{
int elem[MAXSIZE];
int front;
int rear;
int tag;
}SeqQueue;

void Init(SeqQueue *Q)
{
Q->front = Q->rear =0;
Q->tag =0;
}

void Enter(SeqQueue *Q,int n,int x)
{
if(Q->rear == Q->front && Q->tag ==1)
printf("The queue is full\n");
else{
Q->elem[Q->rear] = x;
Q->rear = (Q->rear+1)%n;
printf("Succes\n");
if(Q->rear == Q->front)
Q->tag=1;
}
}

void Del(SeqQueue *Q,int n)
{
if(Q->front == Q->rear && Q->tag == 0)
printf("The queue is empty\n");
else
{
printf("%d\n",Q->elem[Q->front]);
Q->front =(Q->front+1)%n;
if(Q->front == Q->rear)
Q->tag =0;
}
}
int main()
{
int n,m,i,x;
char str[5];
SeqQueue Q;
while(scanf("%d%d",&n,&m)!=EOF){
Init(&Q);
for(i=0;i<m;i++)
{
scanf("%s",str);
if(strcmp(str,"IN") == 0)
{
scanf("%d",&x);
Enter(&Q,n,x);
}
else
Del(&Q,n);
}
}
return 0;

}

提交显示答案错误,请问如何修改???

[解决办法]
不好意思,弄错了,应该是你没有搞清楚题意,main函数都错了,应该只执行M次入队出队操作

热点排行