연결된 목록을 사용하여 대기열을 구현했습니다. 표시 기능은 마지막 요소 만 인쇄합니다. 하지만 모든 요소를 표시하고 싶습니다. 누군가 그것을 고칠 수 있습니까? 디스플레이 기능을 작성하는 다른 방법은 무엇입니까? 노드 선언이 잘못 되었습니까?
내 코드는 다음과 같습니다.
#include <stdio.h>
#include <stdlib.h>
typedef int QueueElement;
typedef enum {TRUE,FALSE} Boolean;
typedef struct node{
QueueElement entry;
struct node *next;
} Node;
typedef struct{
int count;
Boolean full;
Node *front;
Node *rear;
} Queue;
void createQueue(Queue *q){
q->count=0;
q->front=q->rear=NULL;
q->full=FALSE;
}
Boolean IsFull(Queue *q){
return (q->full);
}
Boolean IsEmpty(Queue *q){
return (q->front==NULL && q->rear==NULL);
}
void insert(QueueElement x,Queue *q){
Node *np;
np=(Node*)malloc(sizeof(Node));
if(np==NULL){
printf("Not enough memory\n");
q->full=TRUE;
}
else{
np->entry=x;
np->next=NULL;
if(IsEmpty(q))
q->front=q->rear=np;
else{
q->rear->next=np;
np=q->rear;
}
++q->count;
printf("Inserted %d\n", x);
}
}
void Remove(Queue *q){
Node *np;
if(IsEmpty(q))
printf("Queue is empty\n");
else{
q->count--;
int x=q->front->entry;
np=q->front;
q->front=q->front->next;
if(q->front==NULL)
q->rear=NULL;
free(np);
printf("Removed %d\n",x);
}
}
void display(Queue q){
//if(IsEmpty(q))
// printf("Queue is empty\n");
Node *iter = q.front;
while(iter) {
printf("%d ", iter->entry);
iter = iter->next;
}
}
int main()
{
Queue q;
createQueue(&q);
Remove(&q);
insert(1,&q);
insert(2,&q);
insert(3,&q);
insert(4,&q);
Remove(&q);
display(q);
return 0;
}
내 디스플레이 기능은 다음과 같습니다.
void display(Queue q){
//if(IsEmpty(q))
// printf("Queue is empty\n");
Node *iter = q.front;
while(iter) {
printf("%d ", iter->entry);
iter = iter->next;
}
}
의견은 이미 문제를 발견했지만 이에 대한 답변을 제공합니다.
에서 insert
함수를 다음 줄 문제입니다 :
np=q->rear;
해야한다:
q->rear=np;
예상대로 작동합니다.
Queue is empty
Inserted 1
Inserted 2
Inserted 3
Inserted 4
Removed 1
2 3 4
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다