1.入栈
2.出栈
3.栈顶
4.清空
5.显示已得到的链栈
6.退出
链栈
链栈是指采用链式存储结构实现的栈。通常链栈用单链表来表示。
入栈和出栈的示意图如下:
入栈示意图:
出栈示意图:
此代码需要先利用入栈操作创建一个链栈再执行其他操作。
如图:
执行结果如下:
源码实现如下:
#include<stdio.h>
typedef int Elem;
typedef struct Snode{
Elem data;
Snode *next;
}Snode, *LinkList;
void initStack(LinkList &s){ // 初始化
s = NULL;
return;
}
bool isEmpty(LinkList &s){ // 栈空
if(s == NULL){
return true;
}
return false;
}
void push(LinkList &s){ // 入栈
Elem e;
Snode *p;
printf("入栈的值:\n");
scanf("%d",&e);
p = new Snode;
p->data = e;
p->next = s;
s = p;
return;
}
void pop(LinkList &s){ // 出栈
Elem e;
if(isEmpty(s)){
printf("栈空\n");
return;
}
e = s->data;
LinkList p = s;
s = s->next;
delete p;
printf("%d 出栈成功\n",e);
return;
}
Elem getTop(LinkList &s){ // 栈顶元素
if(!isEmpty(s)){
printf("%d\n",s->data);
return s->data;
}
}
void toEmpty(LinkList &s){ // 清空
LinkList p;
while(s != NULL){
p = s;
s = s->next;
delete p;
}
return;
}
void show(LinkList &s){ // 显示栈
if(!isEmpty(s)){
LinkList p = s;
while(p != NULL){
printf("%d ",p->data);
p = p->next;
}
printf("\n");
return;
}
}
void menu(){// 菜单
printf("------1.入栈\n");
printf("------2.出栈\n");
printf("------3.栈顶\n");
printf("------4.清空\n");
printf("------5.显示\n");
printf("------6.退出\n");
printf("请输入:\n");
}
int main(){
int choice;
int flag = 1;
LinkList L;
initStack(L);
while(flag){
menu();
scanf("%d",&choice);
switch(choice){
case 1: push(L); break;
case 2: pop(L); break;
case 3: getTop(L); break;
case 4: toEmpty(L); break;
case 5: show(L); break;
case 6: flag = 0; break;
}
}
return 0;
}