永发信息网

编写程序实现对链栈的操作

答案:1  悬赏:10  手机版
解决时间 2021-04-21 08:07

数据结构的题目

最佳答案

#include<stdio.h>


#include<malloc.h>


#include<stdlib.h>


typedef int StackElementType;


typedef struct LinkStackNode


{


StackElementType data;


struct LinkStackNode *next;


}LinkStackNode;


typedef struct


{


struct LinkStackNode *top; //栈顶指针


}LinkStack;


void InitStack(LinkStack *s)//初始化链栈


{


s->top=NULL;


printf("\n已经初始化链栈!\n");


}


void ClearStack(LinkStack *s)//链栈置空


{


s->top=NULL;


printf("\n链栈被置空!\n");


}


void Push(LinkStack *s, StackElementType x)//入栈


{


LinkStackNode *p;


p=(LinkStackNode *)malloc(sizeof(LinkStackNode)); //建立一个节点


p->data=x;


p->next=s->top; //由于是在栈顶Push,所以要指向栈顶


s->top=p; //插入


}


StackElementType Pop(LinkStack *s)//出栈


{


StackElementType x;


LinkStackNode *p;


p=s->top; //指向栈顶


if (s->top==0)


{


printf("栈空,不能出栈!\n");


exit(-1);


}


x=p->data;


s->top=p->next; //当前的栈顶指向原栈的next


free(p); //释放


return x;


}


StackElementType GetTop(LinkStack *s)//取栈顶元素


{


if (s->top==0)


{


printf("链栈为空,无栈顶元素!\n");


exit(-1);


}


return s->top->data;


}


void Disp(LinkStack *s)//链栈的遍历


{


printf("\n当前链栈中的数据为:\n");


printf("=====================\n");


LinkStackNode *p;


p=s->top;


while(p!=NULL)


{


printf("\t| %d |\n",p->data);


p=p->next;


}


printf("=====================\n");


}


void main()


{


int cord;


int i,m,n,a;


LinkStack *s;


s=(LinkStack *)malloc(sizeof(LinkStack));


printf("================= 链栈操作=================\n");


printf("\t 第一次使用必须初始化!\n");


do


{


printf("\n");


printf("\n == 主菜单 == ");


printf("\n 1 初始化链栈 ");


printf("\n 2 入栈 ");


printf("\n 3 出栈 ");


printf("\n 4 取栈顶元素 ");


printf("\n 5 置空链栈 ");


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++)


{


printf("请输入第%d个数据:",i);


scanf("%d",&a);


Push(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",i,Pop(s));


}


Disp(s);


}break;


case 4:


{


printf("\n\n链栈的栈顶元素为:%d\n",GetTop(s));


printf("\n");


}break;


case 5:


{


ClearStack(s);


Disp(s);


}break;


case 6:


exit(0);


}


}while (cord<=6);

}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
本地连接连不上
自贡市自流井区环保局怎么去啊,有知道地址的
穿越火线4.7之后进不去
我是1990年农历12月28号生的。我想请问一下姻
男人烦的时候为什么喜欢抽烟?
为什么两个人在一起会闹矛盾?
怎样搞好父妻关系
联通副卡怎么查询套餐,联通号码如何查话费和
一道古法养生地址在什么地方,想过去办事
我中奖一个 1+3 的宝宝 为什么找不到宝
东坡名句,苏轼的千古名句
为什么现在的女人对陌生男人都拒绝认识?
QQ丝路英雄怎么样快速建齐8个城???
初次约会送什么好
大智慧6.0为什么不能启动委托工具
推荐资讯
民生人寿保险股份有限公司沙县营销服务部在什
为什么我的红钻生长值不减?
41周婴儿双径约92mm股骨径约63mm正常吗
诗经里的名句,诗经中的经典名句有那些
红眼PK装备
爱情价更高的前一句,败兴而归的上一句是什么
问问如何显亮
香初上舞中闻人暖的结局?
章鱼是不是鱿鱼,墨鱼和八爪鱼有什么区别?
仙庄杨村卫生所我想知道这个在什么地方
江阴市哪里可以缴职工医疗保险
二手手缝韧机
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?