![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_01.png?5a7ff87)
スタックに対して、push_downを行う関数pushを作成する。push関数を呼び出す前と後でprint_stack_list関数を呼び出し、push関数が正常に働いてることを確認。
以下を実行し、適切な結果が表示されるかを確認
{
確認時は、空のスタックを作成して、以下を実行し適切な結果が表示されるかを確認
push(&top,'a');
print_stack_list(top);
push(&top,'b');
print_stack_list(top);
push(&top,'c');
print_stack_list(top);
}
push関数のプロトタイプ宣言はこのように・・・・
void push (struct data **top, char key);
プログラムは以下のところまでは作りました。上記のところを教えてください。
#include <stdio.h>
#include <stdlib.h>
struct data{ //構造体
char key;
struct data *next;
};
void print_stack_list(struct data *top)
{
struct data *p, *q;
for(q = NULL; q != top; q = p){
for(p = top; p->next != q; p = p->next) ;
printf("%c\n", p->key);
}
}
int main(void)
{
char key;
struct data *top = NULL;
top = (struct data*)malloc(sizeof(struct data)); //メモリ確保
if(top == NULL) //条件式
{
printf("メモリ確保は失敗です。\n");
return 1;
}
top -> key = 'a';
top -> next = NULL;
top -> next = (struct data*)malloc(sizeof(struct data)); //メモリの確保
if(top -> next == NULL)
{
printf("メモリ確保は失敗です。\n");
return 1;
}
top -> next -> key = 'b';
top -> next -> next = NULL;
top -> next -> next = (struct data*)malloc(sizeof(struct data));
if(top -> next -> next == NULL)
{
printf("メモリ確保は失敗です。\n");
return 1;
}
top -> next -> next -> key = 'c';
top -> next -> next -> next = NULL;
top -> next -> next -> next = (struct data*)malloc(sizeof(struct data));
if(top -> next -> next == NULL)
{
printf("メモリ確保は失敗です。\n");
return 1;
}
top -> next -> next -> next -> key = 'd';
top -> next -> next -> next -> next = NULL;
print_stack_list(top);
free(top); //開放
free(top -> next);
free(top -> next -> next);
free(top -> next -> next -> next);
return 0;
}
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?5a7ff87)
No.1ベストアンサー
- 回答日時:
以下のようにしてください。
--------------------------------------
#include <stdio.h>
#include <stdlib.h>
struct data{ //構造体
char key;
struct data *next;
};
void push (struct data **top, 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 (*top == NULL){
*top = add;
return;
}
p = *top;
while(p->next != NULL){
p = p->next;
}
p->next = add;
}
void print_stack_list(struct data *top)
{
struct data *p, *q;
printf("-----print_stack_list start----\n"); //追加(stackの表示開始を見るため)
for(q = NULL; q != top; q = p){
for(p = top; p->next != q; p = p->next) ;
printf("%c\n", p->key);
}
}
int main(void)
{
char key;
struct data *top = NULL;
print_stack_list(top);
push(&top,'a');
push(&top,'b');
push(&top,'c');
push(&top,'d');
print_stack_list(top);
free(top); //開放
free(top -> next);
free(top -> next -> next);
free(top -> next -> next -> next);
return 0;
}
-------------------------------------------------------
尚、print_stack_list中に
スタックの表示開始が判るように
printf("-----print_stack_list start----\n");
を追加しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# leetcode21 1 2022/04/21 11:53
- C言語・C++・C# C言語 leetcode21 Merge Two Sorted Lists 2 2022/04/24 19:35
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 リスト
-
コールバック関数はnullになら...
-
API 録音 MCI
-
複数桁10進数の*桁目だけを抽出...
-
Enterキーを押されたら次の処理...
-
「指定されたキャストは有効で...
-
Aの値からBの値を除するとは??
-
値差の%計算方法について
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
正負を反転させて出力するプロ...
-
プログラムでの数字につく”f”の...
-
2÷3などの余りについて
-
変数とパラメータとは違うもの...
-
「Aに対するBの割合」と「Aに対...
-
DWORDの実際の型は何でしょうか
-
ある商品のロス率を5%見込み、...
-
atoi( ) の反対をやりたい
-
多重定義が起きている?--lnk20...
-
構文エラー";"が型の前にあり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報