#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct list {
int key;/* キー */
char name[20];/* 名前 */
struct list *next;/* 次のデータへのポインタ */
};
struct list *add_list(int key, char *name, struct list *head);
void show_list(struct list *p);
void free_list(struct list *p);
int main(void)
{
struct list *head;/* 先頭ポインタ */
char name[20];
int key = 0;
head = NULL;/* 先頭ポインタにNULLを設定 */
printf("キーと名前(MAX:19文字)を入力(終了:CTRL+Z)\n");
while (scanf("%d %s", &key, name) != EOF) {
/* リストにデータを登録 */
head = add_list(key, name, head);
}
/* リストの表示 */
show_list(head);
/* リストの開放 */
free_list(head);
return 0;
}
/*** リストにデータを登録 ***/
struct list *add_list(int key, char *name, struct list *head)
{
struct list *p;
/* 記憶領域の確保 */
if ((p = (struct list *) malloc(sizeof(struct list))) == NULL) {
printf("malloc error\n");
exit(EXIT_FAILURE);
}
/* リストにデータを登録 */
p->key = key;
strcpy(p->name, name);
/* ポインタのつなぎ換え */
p->next = head;/* 今までの先頭ポインタを次ポインタに */
head = p;/* 新たな領域を先頭ポインタに */
return head;
}
/*** リストの表示 ***/
void show_list(struct list *p)
{
while (p != NULL) {/* 次ポインタがNULLまで処理 */
printf("%3d %s\n", p->key, p->name);
p = p->next;
}
}
/*** リストの開放 ***/
void free_list(struct list *p)
{
struct list *p2;
while (p != NULL) { /* 次ポインタがNULLまで処理 */
p2 = p->next;
free(p);
p = p2;
}
}
これを実行すると、
新しく入力された順にリストが表示されます。
そうではなく、キーの昇順に表示したいです。
どなたかそのように実行できるようにプログラムを書き換えてくれませんか?
図々しいですがよろしくお願いいたします。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セグメントエラー
-
戻り値で構造体を返すことは可...
-
init関数の意味
-
fopne で失敗する原因
-
ハンドルはポインタか
-
Run-Time Check Failure #3とい...
-
C言語のポインタに直接アドレス...
-
C言語の関数と配列に関する質問
-
アプリを32bitから64bit移行
-
VBはCを混乱させる?
-
プログラミングのfarについて
-
連結リスト 要素の入れ替え
-
C言語でのconstを返す関数
-
コンストラクタでnewを失敗した...
-
入れ子の構造体について
-
[excel vba] マウスポインタの...
-
VB6でのgethostbyaddrの使用方...
-
エラーの意味
-
デバイスハンドルとは?
-
ExcelVBAでのkernel32(64bit)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
C言語の関数と配列に関する質問
-
戻り値で構造体を返すことは可...
-
fopne で失敗する原因
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
LPSTR型の初期化について
-
セグメントエラー
-
アプリを32bitから64bit移行
-
コンストラクタでnewを失敗した...
-
ExcelVBAでのkernel32(64bit)
-
Cで作成したDLL関数をVBから呼...
-
ハンドルはポインタか
-
DLL<->VB間での受け渡し(文字...
-
C言語でのconstを返す関数
-
ポインタについて
-
参照型で受け取った引数をポイ...
-
TCHAR文字列内の検索について
-
デバイスハンドルとは?
-
基本アルゴリズムの『返す』の...
おすすめ情報