[英]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.