0

因此,我尝试删除循环队列中的特定元素,并将其索引用作前后。
当我运行代码时:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

#define size 6

int cir_queue[size];
int front = -1, rear = -1;

// Helper functions
int isEmpty();
int isFull();

// Driver functions
void enqueue(int val);
void dequeue(int val);
void display();

void main(){
    int i;
    int arr[] = {5, 7, 0, 6, 3, 9};
    int to_del[] = {6, 9, 5};
    int m = sizeof(arr) / sizeof(arr[0]);
    int n = sizeof(to_del) / sizeof(to_del[0]);

    for(i = 0; i < m; i++){
        enqueue(arr[i]);
        display();
        getch();
    }

    for(i = 0; i < n; i++){
        dequeue(to_del[i]);
        display();
        getch();
    }
    return;
}


int isEmpty(){
    if(front == -1){
        return 1;
    }
    return 0;
}

int isFull(){
    if(front == rear + 1 || (front == 0 && rear == size - 1)){
        return 1;
    }
    return 0;
}

void enqueue(int val){
    if(isFull()){
        printf("\nThe queue is full...");
    } else {
        if(front == -1){
            front = 0;
        }
        rear = (rear + 1) % size;
        cir_queue[rear] = val;
    }
    printf("\nElement inserted:\t%d", val);
    return;
}

void dequeue(int val){
    int element;
    if(isEmpty()){
        printf("\nEmpty Queue...\n");
    } else {
        while (cir_queue[front] != val){
            front = (front + 1) % size;
            rear = (rear - 1) % size;
        }
        element = cir_queue[front];
        if (front == rear){
            front = -1;
            rear = -1;
        } else {
            front = (front + 1) % size;
        }
        printf("\nDeleted element is: %d\n", element);
    }
    return;
}

void display(){
    int i;
    if(isEmpty()){
        printf("Queue is empty...");
    } else {
        printf("\n");
        printf("Front:\t%d\nRear:\t%d\nItems:\t{", front, rear);
        for(i = front; i != rear; i = (i + 1) % size){
            printf("\t%d,", cir_queue[i]);
        }
        printf("\t%d\t}\n\n", cir_queue[i]);
    }
    return;
}

我得到了这样的输出(只有删除部分): -

$ 删除的元素是:6

$ Front: 4
$ Rear: 2
$ Items: { 3, 9, 5, 7, 0 }


$ 删除的元素是:9

$ Front: 0
$ Rear: 1
$ Items: { 5, 7 }


$ 删除的元素是:5

$ 前:1
$ 后:1
$ 项目:{ 7 }

我不明白为什么会这样……有什么解释和解决方案吗?

4

0 回答 0