本帖最后由 elvo 于 2014-5-7 16:46 编辑
根据你的code修改了一下,修改的地方大都做了注释的#include<stdio.h>
#include<stdlib.h>
typedef int Emptype;
typedef struct L_stack
{
Emptype data;
struct L_stack * next;
}StackSize;
typedef struct L_stack *Ptr;
typedef Ptr hStack;
/*
hStack initstack()
{
hStack sBottom;
sBottom=(hStack )malloc(sizeof(StackSize));
if(!sBottom)
return NULL;
sBottom->next=NULL;
return sBottom;
}
*/
void push(hStack *s,Emptype a) //传入了指向s的指针,以便能修改s
{
hStack add;
add=(hStack )malloc(sizeof(StackSize));
if(!add)
printf("stack NO space\n");
add->data=a;
if(!(*s)){
add->next=NULL;
(*s)=add;
}
else{
add->next=(*s);
(*s)=add;
}
}
Emptype pop(hStack *s) //同上
{
if(!(*s))
return 0;
hStack r=(*s);
Emptype io;
io=(*s)->data;
(*s)=(*s)->next;
free(r);
return io;
}
void DestoryStack(hStack *s)
{
hStack r;
if(!(*s))
printf("stack NO start\n");
while((*s))
{
r=(*s);
(*s)=(*s)->next;
free(r);
}
}
int main(void)
{
hStack q=NULL;
int i;
//S=q->next; 为什么要这样做 S=NULL
for(i=0;i<=5;i++)
push(&q,i);
// DestoryStack(&q);
for(i=0;i<5;i++)
printf("%d ",pop(&q));
printf("\n");
}
|