電子書籍の厳選無料作品が豊富!

リストで表現されたキューに対して、enqueuを行う関数enqueueを作成。enqueu関数を呼び出す前後でprint_queue_listを呼び出し、enqueu関数が正常に動くことを確認。
 
void enqueue (struct queue *q,char key);

この上記のところがわからないので教えてください

{

確認時は、空のキューを作成して、以下を実行し、適切な結果が表示されるかを確認

enqueue(&q,'a');
print_stack_list(q);
enqueue(&q,'b');
print_stack_list(q);
enqueue(&q,'c');
print_stack_list(q);


}


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

typedef struct data{
struct data *next;
char key;
}data;

typedef struct queue{
data *top,*rear;
}queue;


void print_queue_list(struct queue q);


int main(){
data d1;
data d2;
data d3;
data d4;
queue q;


d1.next = &d2; //d1.nextにd2のアドレスをいれる
d1.key = 'a';
d2.next = &d3;
d2.key = 'b';
d3.next = &d4;
d3.key = 'c';
d4.next = NULL;
d4.key = 'd';

q.top = &d1;
q.rear = &d4;



print_queue_list(q);


return 0;
}

void print_queue_list(struct queue q)
{

struct data x;

x = *q.top;

int i;
for(i=0;;i++){


printf("%c\n",x.key);

if(x.next == q.rear){
printf("%c\n",q.rear->key);
break;
}
x = *x.next;


}
}

A 回答 (1件)

以下のようにしてください。


尚、print_queue_listも現状のままでは、異常終了しますので、修正しました。
(データが0件、1件の時、異常終了しました。2件以上は問題ありませんでした)
------------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct data{
struct data *next;
char key;
}data;

typedef struct queue{
data *top,*rear;
}queue;


void print_queue_list(struct queue q);
void enqueue (struct queue *q,char key);

int main(){
data d1;
data d2;
data d3;
data d4;
queue q = { NULL,NULL};

enqueue(&q,'a');
print_queue_list(q);
enqueue(&q,'b');
print_queue_list(q);
enqueue(&q,'c');
print_queue_list(q);
enqueue(&q,'d');
print_queue_list(q);
return 0;
}

void print_queue_list(struct queue q)
{
struct data x;
printf("-----print_queue_list start-------\n"); //追加
if (q.top == NULL) return; //追加
x = *q.top;
int i;
for(i=0;;i++){
printf("%c\n",x.key);
if (x.next == NULL) return; //追加
if(x.next == q.rear){
printf("%c\n",q.rear->key);
break;
}
x = *x.next;
}
}
void enqueue (struct queue *q,char key)
{
struct data *p;
struct data *add = malloc(sizeof(struct data));
if (add == NULL){
printf("メモリ確保は失敗です。\n");
exit(1);
}
add->key = key;
add->next = NULL;
if (q->top == NULL){
q->top = add;
q->rear = add;
return;
}
p = q->top;
while(p->next != NULL){
p = p->next;
}
p->next = add;
q->rear = add;
}
---------------------------------------------------
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!