【发布时间】:2016-05-01 05:50:20
【问题描述】:
我是编程新手。我想编写一个程序来实现带有数组的队列(循环队列)。我认为队列函数中的插入和删除元素是正确的,但是显示函数存在一些问题。当队列已满时,如果我尝试插入更多元素,它不会按照函数显示“QUEUE FULL”,它会在元素旁边显示一些垃圾值。
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define m 3 // maximum size of array
int Q[m];
int f=-1,r=-1,s; //f=front,r=rear,s=rear in another term for finding wheather is
queue full
int enQueue(int item){
s = (r+1)%(m+1);
if(f == s)
printf("\nQUEUE FULL");
else{
Q[s] = item;
r = s;
}
return 0;
}
int deQueue(){
int item;
if(f == r)
printf("\nQUEUE UNDERFLOW");
else{
f = (f+1)%(m+1);
item = Q[f];
Q[f] = NULL;
}
return 0;
}
void displayQueue(){
int i;
if(f == r)
printf(" \n The queue is empty\n");
else {
printf("\nQUEUE IS : \n");
for(i=f+1; i<=s; i++) {
printf("%d\t", Q[i]);
}
printf("\n\n********************************************");
}
}
int main(){
int item,i,j;
while (1){
printf("\n\nENTER ITEM TO INSERT : ");
scanf("%d", &item);
enQueue(item);
displayQueue();
}
_getch();
return 0;
}
【问题讨论】:
-
你用过调试器吗?
-
为什么用
m+1而不是m来划分数字?存在访问超出数组范围的风险! -
我在 Visual Studio 12 @ MikeCAT 中编写了这段代码
-
也许你可以集中关注我们,写出什么是错误?也许您可以展示预期结果与您得到的结果?
-
Visual Studio 是一个调试器。请通过准确描述预期输出和实际输出(不仅仅是“存在一些问题”)来改进您的问题。
标签: c data-structures queue