链栈
链栈的存储结构与单链表的存储结构相同。
由于栈是在栈顶进行删除和添加元素的,因此,将链表的首部作为栈顶是最方便的。而且没有必要像单链表那样为了操作简单而附加一个头结点。
在链栈中注意指针的方向是从栈顶指向栈底。
#include<stdio.h>
#define MAX 100
typedef struct StackNode{
int data;
struct StackNode *next;
}StackNode,*LinkStack;
int InitStack(LinkStack &S){
S=NULL;//将栈顶指针置空
return 1;
}
int Push(LinkStack &S,int e){
//元素e入栈
struct StackNode *p;
p=new StackNode;
p->data=e;
p->next=S;
S=p;
//链栈要注意指针的方向是从栈顶指向栈底的
}
int Pop(LinkStack &S,int &e){
if(S==NULL){
return 0;
}
e=S->data;
struct StackNode *q;
q=new StackNode;
q=S;
S=S->next;
delete q;
return 1;
}
void TraveStack(LinkStack S){
struct StackNode *p;
p=S;
while(p){
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main(){
LinkStack S;
if(InitStack(S)){
printf("初始化成功!\n");
}else{
printf("初始化失败!\n");
}
// int n;
// printf("请输入栈的元素个数:");
// scanf("%d",&n);
// for(int i=0;i<n;i++){
// int e;
// printf("请输入栈的元素:");
// scanf("%d",&e);
// Push(S,e);
// }
//
// printf("遍历栈:\n");
// TraveStack(S);
printf("请输入一个元素:");
int a,b;
scanf("%d",&a);
Push(S,a);
Pop(S,b);
printf("出栈的元素:%d\n",b);
}