#include<stdio.h>
#include<stdlib.h>
struct node{
int data;
struct node *next;
};
void push(struct node *top,int data);/*push関数のプロトタイプ[A]*/
int pop(struct node *top);/*pop関数のプロトタイプ[B]*/
int main(){
struct node *top;
int choice,data;
struct node top1;/*[C]*/
top=&top1;
top->next=NULL;
printf("----------------------------------------\n");
printf("Stack Program: 0.Exit 1.push 2.pop \n");
printf("----------------------------------------\n");
while(1){
printf("\n Your Operation:");
scanf("%d",&choice);
if(choice==0) exit(0);
else if(choice==1){ /*push*/
printf(" Enter data:");
scanf("%d",&data);
push(top,data);
}
else if(choice==2){ /*pop*/
data=pop(top);
if(data==-1)printf("Stack is empty!!!\n");
else printf("Deleted data is %d\n",data);
}
else printf("error\n");
}
return 0;
}
/****************************************************
*push 関数
* 引数 1:top ノードのアドレス
* 引数 2:pushするデータ
* 戻り値: なし
****************************************************/
void push(struct node *top,int data)/*D*/
{
struct node *new;
new=top;/*[E]*/
new->data=data;/*[F]*/
new->next=NULL;/*[G]*/
top->next=new;/*[H]*/
}
/***************************************************
*pop関数
* 引数:top ノードのアドレス
* 戻り値:popされたデータ(-1の場合はempty)
*
***************************************************/
int pop(struct node *top)/*I*/
{
struct node *p;
int data;
if(top->next==NULL) return -1;
else{
p=top;/*[j]*/
top->next=NULL;/*[K]*/
data=p->data;/*[L]*/
free(p);
return data;
}
}
popをするときにエラーが起きてしまいます。
メモリが許す限りいくつでも数値を格納するにはどうすればいいのでしょうか?