#include <stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define null 0
typedef int elemtype;
typedef struct stacknode
{
elemtype data;//数据于域
stacknode *next;
}stacknode;
typedef struct
{
stacknode *top;//s->top指向栈顶元素
}linkstack;
//初始化链栈15
void initstack(linkstack *s)
{
s->top=null;
printf("\n已经初始化链栈!\n");
}
//链栈置空21
void setempty(linkstack *s)
{
while(s->top){
s->top=s->top->next;
}
s->top=null;
printf("\n链栈被置空!\n");
}
//入栈36
void pushlstack(linkstack *s,elemtype x)
{ stacknode * p;
p=new stacknode;
if(!p){
printf("内存空间分配失败!");
}
p->data=x;
p->next=s->top;
s->top=p;
}
//出栈
elemtype poplstack(linkstack *s)
{
int value;
if(s->top==null){
printf("栈空,出栈失败!");
}
stacknode *q;
q=s->top;
value=q->data;
s->top=s->top->next;
delete q;
return value;
}
//取栈顶元素
elemtype stacktop(linkstack *s)
{
if(s->top==0)
{
printf("\n链栈空\n");
exit(-1);
}
return s->top->data;
}
//遍历链栈
void disp(linkstack *s)
{
printf("\n链栈中的数据位:\n");
printf("=======================================\n");
stacknode *p;
p=s->top;
while(p!=null)
{
printf("%d\n",p->data);
p=p->next;
}
printf("=====================================\n");
}
主函数
#include<stdio.h>
#include"linkstack.h"
void main()
{
printf("==============链栈操作================\n");
int i,m,n,a;
linkstack *s;
s=(linkstack *)malloc (sizeof(linkstack));
int cord;
do
{
printf("\n第一次使用必须初始化!\n\n");
printf("\n 主菜单 \n");
printf("\n 1 初始化链栈 \n");
printf("\n 2 入栈 \n");
printf("\n 3 出栈 \n");
printf("\n 4 取栈顶元素 \n");
printf("\n 5 置空链栈 \n");
printf("\n 6 结束程序运行 \n");
printf("\n----------------------------------\n");
printf("请输入您的选择(1,2,3,4,5,6)");
scanf("%d",&cord);
printf("\n");
switch(cord)
{
case 1:
{initstack(s);
disp(s);
}break;
case 2:
{printf("输入将要压入链栈的数据的个数:n=");
scanf("%d",&n);
printf("依次将%d个数据压入链栈:\n",n);
for(i=1;i<=n;i++)
{
scanf("%d",&a);
pushlstack(s,a);
}
disp(s);
}break;
case 3:
{
printf("\n出栈操作开始!\n");
printf("输入将要出栈的数据个数:m=");
scanf("%d",&m);
for(i=1;i<=m;i++)
{
printf("\n第%d次出栈的数据是:%d\n",i,poplstack(s));
}break;
}
case 4:
{
printf("\n\n链栈的栈顶元素为:%d\n\n",stacktop(s));
}break;
case 5:
{
setempty(s);
disp(s);
}break;
case 6:exit(0);
}
}while(cord<=6);
}