定义链栈结构 ,其实质是一个受限的单链表
typedef struct LinkStack{
ElemType data;
struct LinkStack *next;
}LinkStack;
不带头结点的链栈的操作
初始化
LinkStack * Init(LinkStack *top)
{
top = NULL ;
return top ;
}
判链栈空
int isempty(LinkStack *top){
if(top == NULL)
return 1;
return 0 ;
}
进栈
LinkStack * push(LinkStack *top , int x){
LinkStack *s = (LinkStack *)malloc(sizeof(LinkStack)) ;
s->data = x ;
s->next = top ;
top = s ;
return top ;
}
出栈
LinkStack * pop(LinkStack *top){
if(top == NULL)
return NULL ; //栈为空时,返回NULL
LinkStack *s = top ;
top= top->next ;
printf("%d",p->data);
free(s) ;
return top;
}
读栈顶元素
int gettop(LinkStack *top){
if(top == NULL)
return NULL ; // 栈为空时,返回NULL
return top->data ;
}
带头结点的链栈的操作
初始化一个带有头结点的链栈
LinkStack *Init(LinkStack *top)
{
top=(LinkStack *)malloc(sizeof(LinkStack));
top->next=NULL;
return top;
}
判链空
int isempty(LinkStack *top){
if(top->next == NULL)
return 1;
return 0 ;
}
}
入栈操作
LinkStack *Push(LinkStack *top,ElemType &e)
{
LinkStack *p;
p=(LinkStack *)malloc(sizeof(LinkStack));
if(p==NULL){ printf("栈满"); }
else{ p->data=e; p->next=top->next; top->next=p; }
return top;
}
出栈操作
LinkStack *Pop(LinkStack *top)
{
LinkStack *p;
ElemType e;
p=top->next;
if(p==NULL){ printf("栈空"); }
else{
e=p->data;
printf("%d",e);
top->next=p->next;
free(p);
}
return top;
}
获取栈顶元素,元素仍在栈内
LinkStack *Get(LinkStack *top)
{
ElemType e;
LinkStack *p;
p=top->next;
if(p==NULL){ printf("空栈");
}else{
printf("\n取栈顶元素:");
e=p->data;
printf("%d \n",e);
}
}