簡體   English   中英

使用 C 的線性隊列實現。編譯器不顯示任何錯誤但程序未運行(顯示錯誤消息:程序已停止工作)

[英]Linear queue implementation using C. Compiler doesn't show any error but program not running(shows error message: program has stopped working)

我正在嘗試使用 C 實現線性隊列,但即使編譯器沒有顯示任何錯誤,程序也沒有運行。 當我嘗試運行該程序時,彈出窗口顯示“程序已停止工作”。 誰能告訴我這段代碼有什么問題以及如何修復它? 任何幫助將不勝感激。 謝謝

```
#include<stdio.h>
#define MAXSIZE 30

struct queue{
    int item[MAXSIZE];
    int rear;
    int front;
};
typedef struct queue qu;

void enqueue(qu *q){
    int data;
    printf("Enter the data to be inserted(enqueued) \n");
    scanf("%d", &data);
    if(q->rear == MAXSIZE-1){
        printf("Queue is full \n");
    }
    else{
        q->rear++;
        q->item[q->rear] = data;
    }
    
}

void dequeue(qu *q){
    if(q->rear < q->front){
        printf("queue is empty \n");
    }
    else{
        q->front++;
        printf("Deleted item is \n %d \n", q->item[q->front]);
    }
}
void display(qu *q){
    int i;
        if(q->rear < q->front){
        printf("queue is empty \n");
    }
    else{
        printf("The queue is : \n");
        for( i=q->front; i<= q->rear; i++){
            printf("%d \t",q->item[i]);
            
        }
    }
}

int main(){
    int ch;
    qu *q;
    q->front = 0;
    q->rear = -1;
    printf("MENU for operation \n");
    printf("1: Enqueue \n 2: Dequeue \n 3: Display \n 4: Exit \n");
    do{
        printf("Choose an operation \n");
        scanf("%d", &ch);
        switch(ch){
            case 1:
                enqueue(q);
                break;
            case 2:
                dequeue(q);
                break;
            case 3:
                display(q);
                break;
            case 4:
                break;
            default:
                printf("Choose number from 1-4");           
        }
    }
    while(ch != 4); 
    return 0;
}

qu *q; 您定義了一個指向qu對象的不確定值的指針; 這是沒有用的。 相反,您必須定義qu q; 並寫出q. main分別寫q->(&q)任何地方(q)

然后dequeue

        q->front++;
        printf("Deleted item is \n %d \n", q->item[q->front]);

你錯誤地增加front服用前項從隊列前; 正確的:

        printf("Deleted item is \n %d \n", q->item[q->front++]);

最后請注意,您的隊列實現可以通過重用已釋放的隊列位置來改進。

暫無
暫無

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

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