#include <cstdio>
#include <cstdlib>
typedef struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode, *LiStack;
void menu(){
printf("1、创建链栈\n");
printf("2、栈是否为空\n");
printf("3、元素进栈\n");
printf("4、出栈\n");
printf("5、栈顶元素\n");
printf("6、查看栈表\n");
printf("7、退出\n");
printf("请选择:");
}
bool InitStack(LiStack &S){
S = NULL;
return true;
}
bool StackEmpty(LiStack S){
if(S == NULL){
return true;
}
return false;
}
bool Push(LiStack &S, int x){
LinkNode *t = (LinkNode *)malloc(sizeof(LinkNode));
t->next = S;
S = t;
S->data = x;
return true;
}
bool Pop(LiStack &S, int &x){
if(S == NULL) return false;
x = S->data;
LinkNode *t = (LinkNode *)malloc(sizeof(LinkNode));
t = S;
S = S->next;
free(t);
return true;
}
bool GetTop(LiStack S, int &x){
if(S == NULL) return false;
x = S->data;
return true;
}
void ShowStack(LiStack S){
while(S != NULL){
printf("%d->", S->data);
S = S->next;
}
printf("NULL\n\n");
}
int main(){
LiStack S;
while(1){
menu();
int n;
scanf("%d", &n);
switch(n){
case 1:{
if(InitStack(S)){
printf("创建成功!\n\n");
}else{
printf("创建失败!\n\n");
}
break;
}
case 2:{
if(StackEmpty(S)){
printf("栈为空!\n\n");
}else{
printf("栈不为空!\n\n");
}
break;
}
case 3:{
printf("请输入进栈元素:");
int num;
scanf("%d", &num);
if(Push(S, num)){
printf("进栈成功!\n\n");
}else{
printf("进栈失败!\n\n");
}
break;
}
case 4:{
int num;
if(Pop(S, num)){
printf("弹出栈顶元素%d!\n\n", num);
}else{
printf("弹栈失败!\n\n");
}
break;
}
case 5:{
int num;
if(GetTop(S, num)){
printf("读出栈顶元素%d!\n\n", num);
}else{
printf("读栈顶元素失败!\n\n");
}
break;
}
case 6:{
ShowStack(S);
break;
}
case 7:{
exit(0);
}
}
}
return 0;
}
【数据结构】——链栈的各功能实现
最新推荐文章于 2021-11-23 20:43:39 发布