栈的链式实现
2015-10-16 21:51
316 查看
#include <stdio.h> #include <stdlib.h> #include <malloc.h> typedef int Elemtype; typedef struct StackNode{ Elemtype data; struct StackNode *next; }StackNode; typedef struct{ struct StackNode *top;//栈顶指针,必须有 struct 才可以 }LinkStack; /*初始化链栈*/ void InitStack(LinkStack *s) { s->top=NULL; printf("\n已经成功初始化链栈!\n"); } /*链栈置空*/ void setEmpty(LinkStack *s) { s->top=NULL; printf("\n链栈已经置空!\n"); } void pushLstack(LinkStack *s,Elemtype x) { StackNode *p; p=(StackNode *)malloc(sizeof(StackNode));//建立结点 p->data=x; p->next=s->top; s->top=p; } Elemtype popLstack(LinkStack *s) { Elemtype x; StackNode *p; p=s->top; if(s->top==0) { printf("\n栈空,不能出栈!\n"); return 0; } x=p->data; printf("\n当前数据为:%d\n",x); s->top=p->next;//当前的栈顶指向原栈的next free(p); return x; } Elemtype StackTop(LinkStack *s) { Elemtype x; if(s->top==0) { printf("\n链栈空\n"); return 0; } { x=s->top->data;printf("\n\n当前链栈的栈顶元素为:%d\n",x); return x; } } /*遍历*/ 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"); } void main() { int i,n,a;//int m; LinkStack *s; s=(LinkStack *)malloc(sizeof(LinkStack)); int cord; printf("第一次使用必须初始化!\n"); do { printf("\n"); printf("\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\n第%d次出栈的数据是:%d",i,popLstack(s)); // } popLstack(s); Disp(s); }break; case 4:{ //printf("\n\n链栈的栈顶元素为:%d\n",StackTop(s)); StackTop(s);printf("\n"); }break; case 5:{ setEmpty(s); Disp(s); }break; case 6:exit(0); } }while(cord<=6); }
相关文章推荐
- Java核心技术第11章(1)
- ByteBuffer.allocate()与ByteBuffer.allocateDirect()方法的区别。
- Weblogic11g下调WebService出现的一系列问题
- Linux学习 -- Shell基础 -- 概述
- 算法录 之 基础算法
- Weblogic11g下调WebService出现的一系列问题
- 华为招聘测试分选机6:才艺展示率
- Python 3.x标准模块库目录
- 阿里巴巴宣布将以45亿美元收购优酷土豆
- 阿里巴巴宣布将以45亿美元收购优酷土豆
- hibernate编程中的一个错误及成因
- Fragment之间的通信
- java演示适配器(adapter)模式
- centos 6,7的网络配置
- String.valueOf() 方法的使用
- Xcode:只修改 Bundle Identifier,不修改项目名
- qmake和moc的功能(★firecat推荐★)
- 14.7-2
- 组态软件厂家一览
- 文件上传与下载