Программа реализации очереди на С - PullRequest
0 голосов
/ 26 января 2012

Я только начал 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 ]

2 голосов
/ 26 января 2012

Вы должны поместить эти объявления:

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

вне основного (и над ним). Вы также должны объявить qfull и и qempty этими объявлениями. Если функция не определена в файле выше, где она вызывается, то она должна быть объявлена ​​выше, где она была вызвана. В противном случае компилятор не сможет их «увидеть».

2 голосов
/ 26 января 2012

Вы должны объявить функции перед их вызовом.Добавьте прототипы в начале вашей программы, например:

int qempty( int f, int r );
int qfull( int r );
1 голос
/ 26 января 2012

Дело в том, что функции вызываются до того, как они определены.Попробуйте переместить их в верхнюю часть программы перед главной.

...