这个C代码中的错误在哪里?

时间:2016-05-01 05:50:20

标签: c data-structures queue

我是编程方面的新手。我想编写一个程序来实现带数组的队列(循环队列)。我认为插入&从队列函数中删除元素是正确的,但显示功能存在一些问题。当队列已满时,如果我尝试插入更多元素,它根据函数不显示“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;
}

3 个答案:

答案 0 :(得分:1)

问题出在if函数的enQueue()条件中。

f为-1,整个程序没有变化,s永远不会为-1,因此条件永远不会成功。

将if条件更改为s == fs==m,即。

if(s == m)
    printf("Queue is full");

再次运行程序。 我测试了它。

答案 1 :(得分:1)

你可以尝试一个新的计数变量,这样你就可以跟踪数组中存在的元素数量

initialize the count to 0 as global
if enque 
check count for the overflow 
 if not
  add element and increase the count
if deque
check count for the underflow
 if not
  delete the element and decrese the count

答案 2 :(得分:1)

代码有很多问题。此回复仅涉及问题范围内的内容。希望它可以提供帮助。

int enQueue(int item){
   if(r+1 >= m)   //check against queue size first...
        printf("\nQUEUE FULL"); 
   else{
        s = (r+1)%(m);
        Q[s] = item;
        r = s;
    }
return 0;        //the return value part could be written better...
}