关注作者:Aqu-蓝空
描述
利用链表对栈的将实现基本操作:
- 入栈
- 出栈
- 打印
代码
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define SIZE sizeof(StackNode)
typedef struct StackNode
{
int data;
struct LNode *next;
}StackNode,*Linkstack;
//功能:入栈操作!
void push(Linkstack s,int x)
{
Linkstack p;
p=(Linkstack)malloc(SIZE);
p->data=x;
p->next=s->next;
s->next=p;
printf("进栈成功!\n");
printf("栈中的元素:\n");
}
//功能:出栈操作!
void pop(Linkstack s,int x)
{
Linkstack p;
if(s->next==NULL)
printf("栈为空,无法进行出栈操作!\n");
else
{
p=s->next;
x=p->data;
s->next=p->next;
free(p);
printf("出栈成功!\n");
printf("出栈的元素为%d。栈内的元素为\n",x);
}
}
//功能:打印栈中的元素!
void outputstack(Linkstack s)
{
Linkstack p;
p=s->next;
while(p)
{
printf("%d",p->data);
p=p->next;
printf("\n");
}
}
//主函数
void main()
{
Linkstack s;
int x,n;
s=(Linkstack)malloc(SIZE);
s->next=NULL;
printf("链栈的功能操作目录:\n");
printf("------------------\n");
printf("1.进栈 2.出栈 0.退出操作!\n");
while(1)
{
printf("\n");
printf("请选择功能操作(该选择功能如果输入别的数字,程序仍然会继续执行该语句!):");
scanf("%d",&n);
switch(n)
{
case 1:
printf("请输入进栈的元素:");
scanf("%d",&x);
push(s,x);
outputstack(s);
break;
case 2:
pop(s,x);
outputstack(s);
break;
case 0:
exit(0);
}
}
}