3 栈和队列-栈的定义(待更改)
来源:互联网 发布:淘宝hd无法登陆 编辑:程序博客网 时间:2024/06/05 00:48
//An是栈顶,A1端是栈底//基本操作InitStack(&S)//操作结果:构造一个空栈S。DestroyStack(&S)//初始条件:栈S已经存在//操作结果:栈S被销毁ClearStack(&S)//初始条件:栈S已经存在//操作结果:栈S清空为出栈StackEmpty(S)//初始条件:栈S已经存在//操作结果:若栈S为空栈,则返回TRUE,否则返回FALSEStackLength(S)//初始条件:栈S已经存在//操作结果:返回S的元素的个数,即栈的长度GetTop(S,&e);//初始条件:栈S已存在//操作结果:用e返回栈顶元素。Push(&S,e)//初始条件:栈S已存在//操作结果:插入元素e为新的栈顶元素Pop(&S,&e)//初始条件:栈S已存在//操作结果:删除S的栈顶元素,同时并用e返回其值StackTraverse(S,visit())//初始条件:栈S已存在且非空//操作结果:从栈底到栈顶依次对S的每个数据元素调用函数visit()//一旦调用的失败,则操作失败
和线性表类似,栈的存储方法,分为两种
(1)顺序栈:栈的顺序存储结构是利用一组地址连续的存储单元依次
存放自栈底到栈顶的数据元素,
同时附设指针top指示栈顶元素在顺序栈中的位置。
【习惯做法】top=0表示空栈,一般在初始化设空栈时不应限定栈的最大容量
【合理做法】先为栈分配一个基本容量,当栈的空间不够时在逐渐扩大
设定两个常量:1_STACK_INIT_SIZE(存储空间初始分配量)
2_STACKINCREMENT(存储空间分配增量)
//顺序栈的定义typedef struct{ SElemType *base; SElemType *top; int stacksize; //当前可使用的最大容量}SqStack;
栈的初始化操作为:按设定的初始分配量进行第一次存储分配
base为栈底指针,在顺序栈中,他始终指向栈底的位置,
若base的值为NULL,则表明栈结构不存在
top为栈顶指针,其初值指向栈底,若top=base,则栈空。
每当插入新的栈顶元素时,指针top增1。
删除栈顶元素时,指针top减1
非空栈的栈顶指针始终在栈顶元素的下一个位置上
//----------ADT Stack的表示与实现---------//----------栈的顺序存储表示--------------#define STACK_INIT_SIZE 100;//存储空间初始分配量#define STACKINCREMENT 100;//存储空间初始分配量typedef struct{ SElemType *base;//构造之前和销毁之后,base的值为NULL SElemType *top; //栈顶指针 base和top都是指针变量 int stacksize; //当前已经分配的存储空间,以元素为单位}SqStack;//--------------基本操作和函数原型-------------Status InitStack(SqStack &S) //构造一个空栈S。Status DestroyStack(SqStack &S)//销毁栈S,S不在存在Status ClearStack(SqStack &S) //把S置为空栈Status StackEmpty(SqStack S); //若栈S为空栈,则返回TRUE,否则返回FALSEint StackLength(SqStack);//返回S的元素的个数,即栈的长度Status GetTop(SqStack S,SElemType &e); //若栈不空,则用e返回S栈顶元素,并返回OK 否则返回FALSEStatus Push(SqStack &S,SElemType e);//操作结果:插入元素e为新的栈顶元素Status Pop(SqStack &S,SElemType &e);//操作结果:删除S的栈顶元素,同时并用e返回其值StackTraverse(SqStack S,Status(*visit)())//操作结果:从栈底到栈顶依次对S的每个数据元素调用函数visit()//一旦调用的失败,则操作失败
//---------基本操作和算法描述-------------Status InitStack(SqStack &S) //构造一个空栈S。{ //构造一个空栈S。 S.base = (SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!Sbase)exit(OVERFLPW);//存储分配失败 S.top = S.base; S.stacksize = STACKINCREMENT; return OK;}//InitStackStatus GetTop(SqStack S,SElemType &e)//若栈不空,则用e返回S的栈顶元素,并返回OK,否则返回ERROR{ if(S.top==S.base) return ERROR; e = *(S.top-1); return OK;}//GetTopStatus Push(SqStack &S,SElemType e) //插入元素e为新的栈顶元素{ if(S.top-S.base>=S.stacksize)//栈满追加空间 { S.base = (SElemType*)relloc(S.base, (S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base)exit(OVERFLOW);//存储分配失败 S.top = S.base+S.stacksize; S.stacksize +=STACKINCREMENT; } *S.top++=e;//先移动位置,在赋值 return OK; }Status Pop(SqStack &S,SElemType &e){ //若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR if(S.top==S.base) return ERROR; e = *--S.top; return OK;}
阅读全文
0 0
- 3 栈和队列-栈的定义(待更改)
- 栈和队列的定义
- 队列和栈的结构的定义
- 二 数据结构栈和队列基本定义
- (1.2.2)栈、队列的的结构定义和基本操作
- 实验四 栈和队列的定义与实现(未完成)
- 4、数据结构笔记之四栈和队列定义
- 优先队列的模板和定义
- 栈和队列的
- 栈和队列--队列
- 【栈和队列】队列
- 队列----定义和实现
- 队列----定义和实现
- 更改物体的渲染队列
- 队列的定义
- 栈和队列的实现
- 栈和队列的不同
- 栈和队列的问题
- java 开发 idea spring->resource添加多个资源配置文件夹
- 浅谈数据分库分表之道
- intellij IDEA右键没有Git或svn处理方法
- hdoj 2066 一个人的旅行
- 关于在python中, 在同一个project中的同一个目录里面, 导入模块的问题
- 3 栈和队列-栈的定义(待更改)
- ### Error building SqlSession. ### The error may exist in sqlmap/User.xml
- C++之父:C++ 的五个普遍误解(1)
- chapter22_2
- Python-Seaborn热图绘制
- 【bzoj 1066】蜥蜴(最大流)
- wustoj(医院设置)
- 初次运行Selenium的ChromeDriver安装
- Android调用系统自带的文件管理器进行文件选择并获得路径,android文件管理器