顺序栈的表示和实现
来源:互联网 发布:日本实景地图软件 编辑:程序博客网 时间:2024/05/02 20:15
#include <malloc.h>#include <stdlib.h>#include <stdio.h>#define stackinit 100#define stackincre 10#define overflow -2typedef int Selemtype;typedef struct { Selemtype *base; Selemtype *top; int stacksize;} seqstack;int initstack(seqstack &s) //构造一个空栈{ s.base=(Selemtype*)malloc(sizeof(Selemtype)*stackinit); if (!s.base) return 0; //存储分配失败 s.top=s.base; s.stacksize=stackinit; return 1; }int destroystack(seqstack &s) //销毁栈s,s不再存在{ if (s.base) free(s.base); return 1;}int clearstack(seqstack &s) //将s置为空栈{ s.top=s.base; return 1;}int stackempty(seqstack s) //若栈s为空栈,则返回1,否则返回0{ return s.top==s.base;}int stacklength(seqstack &s) //返回s的元素个数,即栈的长度{ return s.top-s.base;}int gettop(seqstack s,Selemtype &e) //若栈不空,则用e返回s的栈顶元素,否则返回0{ if (s.top==s.base) return 0; e=*(s.top-1); return e;}int push(seqstack &s,Selemtype e) //插入元素e为新的栈顶元素{ if (s.top-s.base >= stackinit){ //栈满,追加存储空间 s.base = (Selemtype*)realloc(s.base , (s.stacksize+stackincre)*sizeof(Selemtype)); if(!s.base) //存储分配失败 exit(overflow); s.top= s.base + s.stacksize; s.stacksize += stackincre;} *(s.top++) = e; return 1;}int pop(seqstack &s,Selemtype &e) //若栈不空,则删除s的栈顶元素,用e返回其值,并返回1;否者返回0{ //是不是和前面的gettop函数有点像 if (s.top==s.base) return 0; e=*(--s.top); //区别在这 return 1;}int Print(int t) { printf (" %d", t); return 1;}int stacktraverse(seqstack s,int (*visit)(Selemtype)) //从栈底到栈顶依次调用函数visit().一旦visit()失败,则操作失败{ Selemtype *p; p=s.base; while (p!=s.top) { visit(*p); //函数指针 p++; } return 1;}void conversion() { //进制转换 seqstack S; int N; initstack(S); scanf ("%d", &N); while (N) { push(S, N % 8); N = N / 8; } int e; while (!stackempty(S)) { pop(S, e); printf ( " %d", e); }}int main () { seqstack La; printf("构造一个空栈中……\n"); initstack(La); printf ("成功\n"); int n, e, i, top; printf ("请输入要进栈的的个数:"); scanf ("%d", &n); for (i=0; i<n; i++){ int temp; printf ("输入入栈的的第%d个元素:\n", i+1); scanf ("%d", &temp); push(La, temp); } printf("本栈是空栈吗??\n"); if (stackempty(La) == 1) printf("YES !!!\n"); else printf("NO !!!\n"); printf("遍历:"); stacktraverse(La, Print); puts(""); printf ("栈长:%d\n", stacklength(La)); top = gettop(La, e); printf ("栈顶元素:%d\n", top); push(La, 8); printf("遍历:"); stacktraverse(La, Print); puts(""); printf ("栈长:%d\n", stacklength(La)); pop(La, e); printf("出栈的元素是:%d\n", e); printf("元素出栈后事实上并没有清除,依然存在于内存空间,所谓的出栈只是指针移动,出栈的元素是%d\n", *La.top);//判断出栈后元素是否还存在于内存中 printf ("开始清空栈……\n"); clearstack(La); printf("现在栈中的元素是:\n"); stacktraverse(La, Print); if(destroystack(La)) printf ("销毁成功\n"); else printf ("你失败了\n");// conversion(); return 0;}
阅读全文
0 0
- 顺序栈的表示和实现
- 顺序栈的表示和实现
- 栈的顺序表示和实现
- 栈的顺序表示和实现
- 栈的顺序表示和实现
- 栈的顺序表示和实现(数据结构)
- 栈的顺序表示和实现
- 栈的顺序表示和实现
- 栈的顺序表示和实现
- 顺序栈的表示和实现
- 顺序栈的表示和实现
- 重温数据结构:栈的顺序表示和实现与栈的链式表示和实现
- 2007.08.27栈的表示和实现之顺序栈
- 数据结构(3):顺序栈的表示和实现
- c语言顺序栈的表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 本人开发的数据可视化工具包:Matplot3D for JAVA 欢迎使用
- 谷歌百度迎来劲敌,微软欲改写搜索引擎市场格局
- Linux常用命令总结
- 单例模式-Singleton Pattern
- 随时随地退出应用(结束之前所有的Activity)
- 顺序栈的表示和实现
- (原创) redis 4.0.6 安装中的坑
- Banana Pi BPI-W2 开源硬件,RTD1296方案设计,比派科技最新出品
- s5pv210-Linux之开发板PING外网
- Flume_拦截器、选择器、Sink组
- iOS 判断是否全部为数字
- apache-ant编译中出现“includeantruntime was not set”警告的问题?
- 1056. 组合数的和(15)
- oracle-sql优化