dポイントプレゼントキャンペーン実施中!

スタックに対して、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;
}

A 回答 (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");
を追加しています。
    • good
    • 0

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