本文涉及的代码功能有:
- 链栈的初始化
- 链栈元素的压入
- 链栈元素的输出
/*链栈test*/
#include<iostream>
#include<stdlib.h>
typedef int ElemType;
typedef int status;
typedef struct LinkStack{
ElemType data;
struct LinkStack *next;
}Lnode,*List;
//链栈初始化
void initstack(List &s){
s=NULL;
}
void push(List &s,ElemType e){
List p = new Lnode;
p->data=e;
p->next = s;
s=p;
printf("入栈成功!\n");
}
status pop(List &s,ElemType &e){
List p;
if(s==NULL){printf("栈已空!\n");return 0;}
else{
e=s->data;
s=s->next;
delete s;
return 1;
}
}
//入栈!
void pushstack(List &s){
int n;
ElemType e;
printf("请输入入栈元素个数:");
scanf("%d",&n);
for(int i=0;i<n;i++){
printf("请输入数字:");
scanf("%d",&e);
push(s,e);
}
}
//出栈
void popstack(List &s){
int n,flag;
ElemType e;
printf("请输入出栈个数:");
scanf("%d",&n);
for(int i=0;i<n;i++){
flag=pop(s,e);
if(flag)printf("%d\t已出栈!!\n",e);
if(!flag)
break;
}
}
//获得栈顶
void gettop(List &s){
ElemType e;
e=s->data;
printf("栈顶元素为:%d\n",e);
}
int main(){
List s;
int c;
initstack(s);
while(1){
printf("入栈————1\t出栈————2\t获得栈顶————3\t退出————0\n");
printf("请输入操作代码:");
scanf("%d",&c);
if(c==0)break;
switch(c){
case 1:pushstack(s);break;
case 2:popstack(s);break;
case 3:gettop(s);break;
default :printf("操作代码不在范围内!\n");
}
}
return 0;
}