質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

3回答

868閲覧

リスト構造と待ち行列

kakakaaka

総合スコア17

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

1グッド

1クリップ

投稿2017/12/09 08:29

編集2022/01/12 10:55

リスト構造と待ち行列をしたいのですが、よくわかりません。
おすすめのサイトや説明おねがいします。

#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> // 要素の構造 struct student { int num; char name[10]; // 名前の文字数は自由 }; // ポインタで渡された構造体を最後尾にデータを追加する void enqueue(struct student *q) { int bango; char namae[10]; bango = q->num; strcpy(q->namae, in_name); } struct student *dequeue(){ struct student *p; if(root == NULL) return NULL; p = root; root = p->next; return p; } int main() { int in_num; char in_name[10]; struct student *p; char *p_E = "E"; char *p_D = "D"; char input[10]; printf("Please input ENQ(E) or DEQ(D):"); scanf("%s", input); if(strcmp(input, p_E) == 0){ printf("Input number and name : "); while(scanf("%d %s", &in_num, &in_name) != EOF){ p = (struct student *)malloc(sizeof(struct student)); p->num = in_num; strcpy(p->name, in_name); enqueue(p); } }else if(strcmp(input, p_D) == 0){ printf("Number=%d Name=%s\n",dequeue()); }else(dequeue(p) == 0){ printf("No data! "); break; }
DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

こんにちは。

お気楽C言語プログラミング超入門の「●連結リストによるキューの実装」は図解入りでサンプルソースもあるので解りやすそうですよ。

投稿2017/12/09 15:41

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaroToyotomi

2017/12/10 08:30

自分のイメージですが、待ち行列は「首都高の料金所の車の出入り」、キューは「ところてんを押し出しているところ」をイメージしちゃいますね。
guest

0

動きが異なりますが作成してみました。ご参考に

c

1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4// 要素の構造 5struct student { 6 int num; 7 char name[10]; // 名前の文字数は自由 8 struct student *next; // 線形ライン 9}; 10 11// ポインタで渡された構造体を最後尾にデータを追加する 12struct student *enqueue(struct student *p, int in_num, char *in_name) { 13 struct student *q; 14 q = (struct student *)malloc(sizeof(struct student)); 15 q->num = in_num; 16 strcpy(q->name, in_name); 17 q->next = p; 18 return(q); 19} 20 21struct student *dequeue(struct student *p){ 22 23 if(p == NULL) 24 return NULL; 25 printf("Number=%d Name=%s\n",p->num, p->name); 26 struct student *q = p->next; 27 free(p); 28 return q; 29} 30 31void print_remain(struct student *p){ 32 while(p != NULL ){ 33 printf("\nNumber=%d Name=%s",p->num, p->name); 34 p=p->next; 35 } 36} 37 38int main() { 39 int in_num; 40 char in_name[10]; 41 struct student *p = NULL; //先頭アドレス 42 char *p_E = "E"; 43 char *p_D = "D"; 44 char input[10]; 45 46 printf("Please input ENQ(E) or DEQ(D):"); 47 while(scanf("\n%s", input) != EOF){ 48 if(strcmp(input, p_E) == 0){ 49 printf("Input number and name : "); 50 while(scanf("\n%d%s", &in_num, &in_name) != EOF){ 51 p=enqueue(p, in_num, in_name); 52 printf("Input number and name : "); 53 } 54 }else if(strcmp(input, p_D) == 0){ 55 p=dequeue(p); 56 }else if(p == NULL){ 57 printf("No data! "); 58 } 59 printf("\nPlease input ENQ(E) or DEQ(D):"); 60 } 61 print_remain(p); 62 printf("\n"); 63}

投稿2017/12/10 23:13

編集2017/12/11 09:40
A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rubato6809

2017/12/11 09:19

少なくとも dequeue() 関数が未完成だと、return と free(p) が語ってますねw
A.Ichi

2017/12/11 09:44 編集

ご指摘ありがとうございます。その通りでした。 typedef使うともう少しスッキリする気がします。
guest

0

まずは待ち行列を配列で実装して練習するのも一考です。

提示のプログラムの形を生かすならば以下のグローバル変数を定義してpop/pushの実装ができます。

先頭ポインタhead(プログラム中ではrootという変数名)
末尾ポインタtail(または末尾の先をダブルポインタ)

投稿2017/12/09 11:37

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2017/12/10 04:57

待ち行列はキューとして考えるでしょうから、質問者さんが混乱しないよう、スタックに対する操作pop/pushは避けた方がよいと感じます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問