顺序栈的应用
来源:互联网 发布:php oa系统源码 编辑:程序博客网 时间:2024/06/06 14:29
//预编译命令
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 10 //顺序栈存储空间的初始分配量
#define STACKINCREMENT 2 // 顺序栈存储空间的分配增量
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 10 //顺序栈存储空间的初始分配量
#define STACKINCREMENT 2 // 顺序栈存储空间的分配增量
//数据结构typedef int Status;typedef int SElemType; //完成数制转换//typedef char SElemType; //完成括号匹配typedef struct{ SElemType *base; // 存储空间基址 SElemType *top; // 存储空间基址 int stacksize; // 当前分配的存储容量(以sizeof(ElemType)为单位)}SqStack;//函数声明int menu_select();Status InitStack(SqStack &S);Status CreateStack(SqStack &S,int n);void PrintStack(SqStack S);Status GetTop(SqStack S,SElemType &e);Status Push(SqStack &S,SElemType e);Status Pop(SqStack &S,SElemType &e);Status StackEmpty(SqStack S);Status DestroyStack(SqStack &S);
//主函数int main(){ SqStack S; Status s; int n; SElemType e; for(;;) { switch(menu_select()) { case 1: s=InitStack(S); if(s) printf("初始化成功\n"); else printf("初始化失败\n"); break; case 2: printf("输入栈的长度:"); scanf("%d",&n); s=CreateStack(S,n); if(s) printf("创建成功\n"); else printf("创建失败\n"); break; case 3: PrintStack(S); break; case 4: s=GetTop(S,e); if(s) printf("栈顶元素为%d\n",e); else printf("栈为空,取栈顶元素失败\n"); break; case 5: printf("输入入栈的元素值:"); scanf("%d",&e); s=Push(S,e); if(s) printf("%d入栈成功\n",e); else printf("入栈失败\n"); break; case 6: s=Pop(S,e); if(s) printf("%d出栈成功\n",e); else printf("栈为空,出栈失败\n"); break; case 7: s=StackEmpty(S); if(s) printf("栈为空\n"); else printf("栈不为空\n"); break; case 8: s=DestroyStack(S); if(s) printf("销毁栈成功\n"); else printf("销毁栈失败\n"); break; case 0: printf("程序结束,谢谢使用\n\n"); exit(0); } } return 0;}
//菜单函数int menu_select(){ int sn; printf("\n显示菜单\n"); printf("1.初始化栈\n"); printf("2.创建栈\n"); printf("3.显示栈\n"); printf("4.取栈顶元素\n"); printf("5.入栈\n"); printf("6.出栈\n"); printf("7.判断栈空否\n"); printf("8.销毁栈\n"); printf("0.退出\n"); printf("输入 0-8:"); for(;;) { scanf("%d",&sn); if(sn<0||sn>8) printf("\n输入错误,重选0-8:"); else break; } return sn;}// 构造一个最大空间为 STACK_INIT_SIZE的空顺序栈SStatus InitStack (SqStack &S){ S.base=(SElemType *) malloc(STACK_INIT_SIZE*sizeof(SElemType)); if (!S.base) exit (OVERFLOW); //存储分配失败 S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK;}
//输入n个元素入栈Status CreateStack(SqStack &S,int n){ int i; if(n>S.stacksize) return(ERROR); printf("输入%d个整型数:",n); for(i=1;i<=n;i++) { scanf("%d",S.top++); } return OK;}
//输入n个元素入栈Status CreateStack(SqStack &S,int n){ int i; if(n>S.stacksize) return(ERROR); printf("输入%d个整型数:",n); for(i=1;i<=n;i++) { scanf("%d",S.top++); } return OK;}
// 栈不空,则用e返回栈顶元素Status GetTop(SqStack S,SElemType &e){ // SElemType *m; if(S.top==S.base) return ERROR; e=*(S.top-1);// m=S.top;// printf("%d\t",*m); return OK;}
//给定值e入栈Status Push(SqStack &S,SElemType e){ if(S.top - S.base >= S.stacksize) { S.base = (SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT; } if(!S.base) { exit (OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++ =e; return OK;}
// 若栈不空,则删除S的栈顶元素,// 用 e 返回其值,并返回OK;// 否则返回ERRORStatus Pop (SqStack &S, SElemType &e){ if(S.top==S.base) return ERROR; e=*--S.top; return OK;}
//判断栈空否Status StackEmpty(SqStack S){ if(S.top==S.base) return OK; else return ERROR;}
//销毁栈Status DestroyStack(SqStack &S){ if(!S.base) return ERROR; free(S.base); return OK;}
1 0
- 顺序栈的应用
- 顺序栈的应用:表达式求值
- 数据结构之顺序栈的应用
- 顺序栈的应用-括号匹配
- static的顺序应用
- 顺序队列的应用
- 顺序表的应用
- 顺序表的应用
- 顺序表的应用
- 顺序表的应用
- 顺序栈及应用
- Flex应用的初始化顺序
- 顺序表的应用举例
- 顺序表的应用实例
- 【应用】顺序表的插入
- 顺序表的应用举例
- 顺序表的应用举例
- 2.顺序表的应用
- 接收用户输入的年月(1990年以后),在控制台中输出当月日历。
- 埃尔米特函数的计算(C++)
- 输入一个十六进制的数,然后按位输出2进制形式
- CCF CSP试题 201409-2 画图
- c 字符串 整数转换
- 顺序栈的应用
- UVA 548 Tree 中序+后序构造二叉树dfs
- ORACLE 11g 创建数据库时 Enterprise Manager配置失败的解决办法 无法打开OEM的解决办法
- 在 JavaScript 中 prototype 和 __proto__ 有什么区别
- 如何用 MAC Address 找到 IP
- Oracle触发器抛出自定义异常
- vsftp上传文件出现553 Could not create file解决方法
- 第四届河南省ACM 序号互换 进制转换
- Android http请求