C语言 出队功能工作不正常

afdcj2ne  于 2022-12-11  发布在  其他
关注(0)|答案(1)|浏览(132)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define max 100

int enqueue();
int dequeue();
int peek();

int main() {
    char name[max][80], data[80];
    int front = 0;
    int rear = 0;
    int value;
    int ch;
    printf("------------------------------\n");
    printf("\tMenu");
    printf("\n------------------------------");
    printf("\n [1] ENQUEUE");
    printf("\n [2] DEQUEUE");
    printf("\n [3] PEEK");
    printf("\n [4] DISPLAY");
    printf("\n------------------------------\n");
    while(1)
    {
        printf("Choice : ");
        scanf("%d", &ch);
        switch(ch) {
            case 1 : // insert
                printf("\nEnter the Name : ");
                scanf("%s",data);
                value = enqueue(name, &rear, data);
                if(value == -1 )
                    printf("\n QUEUE is Full \n");
                else
                    printf("\n'%s' is inserted in QUEUE.\n\n",data);
                break;
            case 2 : // delete
                value = dequeue(name, &front, &rear, data);
                if( value == -1 )
                    printf("\n QUEUE is Empty \n");
                else
                    printf("\n Deleted Name from QUEUE is : %s\n", data);
                printf("\n");
                break;
            case 3:
                value = peek(name, &front, &rear, data);
                if(value != -1)
                {
                    printf("\n The front is: %s\n", data);
                }
                break;
            case 5 : exit(0);
            default: printf("Invalid Choice \n");
        }
    }
    return 0;
}

int enqueue(char name[max][80], int *rear, const char data[80]) {
    if(*rear + 1 == max)
        return -1;
    strcpy(name[*rear], data);
    (*rear)++;
    return 1;
}

int dequeue(char name[max][80], int *front, int *rear, char data[80])
{
      if(*front == *rear)
            return(-1);
      else
      {
            (*front)++;
            strcpy(data, name[*front]);
            return(1);
      }
}

int peek(char name[max][80], int *front, int *rear, char data[80]) {
    if(*front == *rear) {
        printf(" QUEUE IS EMPTY\n");
        return -1;
    }
    strcpy(data, name[*front]);
    return 1;
}

学生在这里。
我的出队功能不能正常工作。出队功能不是删除第一个元素而是删除第二个元素。例如,用户首先输入名称“Jennie”,然后第二个是“丽莎”,当用户选择出队功能时,“Jennie”应该被删除,但我的程序删除了第二个元素“Lisa”。如何修复此问题?

z9smfwbn

z9smfwbn1#

您需要在取消队列值之后递增前端:

int dequeue(char name[max][80], int *front, int *rear, char data[80])
{
    if(*front == *rear)
        return -1;
    strcpy(data, name[(*front)++]);
    return 1;
}

相关问题