链栈
链栈的存储结构与单链表的存储结构相同。
在链栈中注意指针的方向是从栈顶指向栈底。
#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); }