C中的队列实施程序

时间:2012-01-26 14:21:18

标签: c queue implementation

我刚开始使用C而我正在尝试从我的书中执行此队列实现程序,但它无法正常工作。它给出了函数qfull和qempty未定义的错误。即使在正确声明该功能后,它仍然会产生更多错误。

#include <stdio.h>
#include <process.h>
#include <conio.h>
#define QUEUE_SIZE 5

void main()
{
    void insert_rear(int, int *, int *);
    void delete_front(int *, int *, int *);
    void display(int *, int, int);
    int choice, item, f, r, q[10];
    /* Queue is empty */
    f = 0; /* Front end of queue*/
    r = -1; /* Rear end of queue*/
    for (;;)
    {
        clrscr();
        printf("\t\t\t Ordinary Queue Operation\n\n");
        printf("\t\t\t 1 …. Push / Insert\n");
        printf("\t\t\t 2 …. Pop / Delete\n");
      printf("\t\t\t 3 …. View / Display\n");
        printf("\t\t\t 4 …. Exit\n\n\n");
        printf("\t\t\t Enter the choice : "); scanf("%d", &choice);
        switch (choice)
        {
            case 1: // push into the queue
                printf("Enter the item to be inserted : "); scanf("%d", &item);
                insert_rear(item, q, &r);
                continue;
         case 2: // pop from the queue
                delete_front(q, &f, &r);
                break;
            case 3: // display queue
                display(q, f, r);
                break;
            case 4:
                exit(0);
         default:
                printf("\t\t\tInvalid Input – Try Again");
        } // end of switch
        getch();
    }// end of for
} // end of main



/*******************/



void insert_rear(int item, int q[], int *r)
{
    if (qfull(*r)) /* Is queue full ? */
    {
        printf("\t\t\tQueue overflow\n");
        return;
    }
    /* Queue is not full */
    q[++(*r)] = item; /* Update rear pointer and insert a item */
}



/*—————————————————————– */



void delete_front(int q[], int *f, int *r)
{
    if (qempty(*f, *r))
    {
        printf("\t\t\tQueue underflow\n");
        return;
    }
    printf(" Pop Successfull, element deleted = %d ",q[(*f)++]);
    if(*f> *r)
    {
        *f=0,*r=-1;
    }
}



/*********************************************************/



void display(int q[], int f, int r)
{
    int i;
    if (qempty(f,r))
    {
        printf("Queue is empty\n");
        return;
    }
    printf("\t\t\t Queue Container\n\n");
    for(i=f;i<=r; i++)
        printf("\t\t\t| %5d |\n",q[i]);
}



/**********************************************/



int qempty(int f, int r)
{
    return (f>r)?1:0;
    /* returns true if queue is empty otherwise returns false */
}



/**********************************************/



int qfull(int r)
{ /* returns true if queue is full otherwise false */
    return (r==QUEUE_SIZE-1)?1:0;
}

3 个答案:

答案 0 :(得分:2)

您必须在调用函数之前声明函数。在程序开头添加原型,例如:

int qempty( int f, int r );
int qfull( int r );

答案 1 :(得分:2)

你应该把这些声明:

void insert_rear(int, int *, int *);
void delete_front(int *, int *, int *);
void display(int *, int, int);

在主外(及其上方)。您还需要通过这些声明声明qfull和qempty。如果函数没有在上面调用它的文件中定义,那么它必须在它被调用的地方上面声明。否则,编译器无法“看到”它们。

答案 2 :(得分:1)

事情是函数在定义之前被调用。尝试在main之前将它们移动到程序的顶部。