簡體   English   中英

C語言中的隊列實現程序

[英]Queue implementation program in C

我剛剛開始使用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;
}

您必須在調用函數之前聲明它們。 在程序的開頭添加原型,例如:

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

您應該放置以下聲明:

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

在main之外(並在其之上)。 您還需要通過這些聲明聲明qfull和qempty。 如果一個函數沒有在調用它的上方的文件中定義,則必須在調用它的上方聲明它。 否則,編譯器將無法“看到”它們。

問題是在定義函數之前先調用它們。 嘗試將它們移動到main之前的程序頂部。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM