![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_01.png?e8efa67)
リストで表現されたキューに対して、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;
}
}
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?e8efa67)
No.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;
}
---------------------------------------------------
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Visual Basic(VBA) 複数シート一括作成後に、特定範囲の数式は値で貼り付けしたい 3 2022/10/07 11:18
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【至急!!!】python言語で本を見...
-
UWSCのSELECT文の記述方法
-
16進の10進変換について
-
c言語 16進数の2進数への変換
-
関数「exists」と「defined」の...
-
DBIがうんともすんとも言いませ...
-
$(ドル)の記号を表示したいの...
-
数値かどうかの判定方法
-
Perlにおける<?phpinfo();?>の...
-
Use of uninitialized value ---
-
pythonで演算子を変数に代入す...
-
掲示板からのメールの本文中に...
-
Python3
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
メモリをアドレスを直接指定し...
-
SELECT OPTIONの中身をコピペ...
-
FindFirst を複数条件で検索
-
構造体の各データの表示につい...
-
文字の横にプルダウンを表示さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
16進の10進変換について
-
【至急!!!】python言語で本を見...
-
pythonで演算子を変数に代入す...
-
数値かどうかの判定方法
-
pythonの*
-
UWSCのSELECT文の記述方法
-
int(input("○○"))の使い方
-
関数「exists」と「defined」の...
-
c言語 16進数の2進数への変換
-
Perlにおける<?phpinfo();?>の...
-
シェルスクリプトで、空白(ス...
-
I2C接続のLCDディスプレイを使う
-
「HSP」でキャラコードを使って...
-
switch文のエラーについて
-
Use of uninitialized value ---
-
変数の中は文字列か数値か調べ...
-
perでメールが送信出来ない場合...
-
画面上再読み込みをさせたいの...
-
awkの正規表現での最左最短マッ...
-
数値英単語変換
おすすめ情報