数据结构之 顺序栈、共享栈、链栈
顺序栈、共享栈、链栈
- 一、思维导图:
- 二、栈的定义:
- 三、栈的特点:
- 四、栈的基本操作:
- 五、常考题型:
- 六、顺序栈:
- 1.思维导图:
- 2.顺序栈基本操作的实现:
- 1.定义栈:
- 2. 初始化栈:InitStack(&s)
- 3.销毁栈:DestoryStack(&S)
- 4.进栈:Push(&s,x)
- 5.出栈:Pop(&s,&x)
- 6.读栈顶元素:GetTop(s,&x)
- 7.判空栈:StackEmpty(S)
- 七、共享栈:
- 1.共享栈的定义
- 2.顺序栈基本操作的实现:
- 1.定义栈:
- 1.初始化栈:InitStack(&s)
- 2.销毁栈:DestoryStack(&L)
- 3.进栈:Push(&s,x)
- 4.出栈:Pop(&s,&x)
- 5.读栈顶元素:GetTop(s,&x)
- 八、链栈:
- 1.思维导图:
- 2.链栈基本操作的实现:
- 1.定义链栈:
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 九、栈的数学性质
一、思维导图:
**ps:**栈和线性表非常类似,学习过程中可以对比进行学习。
二、栈的定义:
特殊的线性表。仅在标尾进行插入或删除操作的线性表栈顶 = 表尾栈底 = 表头空栈 = 空表
三、栈的特点:
LIFO(last in first out)
四、栈的基本操作:
初始化栈:InitStack(&s)销毁栈:DestoryStack(&L)进栈:Push(&s,x)出栈:Pop(&s,&x)读栈顶元素:GetTop(s,&x)判空栈:StackEmpty(S)
五、常考题型:
结论:n个不同元素进栈,出栈元素不同排列的个数为
六、顺序栈:
1.思维导图:
2.顺序栈基本操作的实现:
1.定义栈:
#define MaxSize 100typedef struct{int data[MaxSize]; //静态数组存放栈中元素 int top; //栈顶指针
}SqStack;
2. 初始化栈:InitStack(&s)
**ps:**初始化不同,判空、进栈、出栈判断条件都会不同。当S.top = 0时,小伙伴们自己思考一下
void InitStack(SqStack &S){S.top = -1;
}
3.销毁栈:DestoryStack(&S)
bool DestoryStack(SqStack &S)
{S.top = NULL;return true;
}
4.进栈:Push(&s,x)
bool Push(SqStack &S,int x){if(S.top == MaxSize-1)return false;//S.data[++S.top] = x;S.top = S.top + 1;S.data[S.top] = x;return true;}
5.出栈:Pop(&s,&x)
bool Pop(SqStack &S,int &x){if(S.top == -1)return false;//x = S.data[S.top--];x = S.data[S.top];S.top = S.top - 1;return true;
}
6.读栈顶元素:GetTop(s,&x)
bool GetTop(SqStack &S,int &x){if(S.top == -1)return false;x = S.data[S.top];return true;
}
7.判空栈:StackEmpty(S)
bool StackEmpty(SqStack S){if(S.top == -1)return true;elsereturn false;
}
七、共享栈:
1.共享栈的定义
俩个栈共享同一片空间
2.顺序栈基本操作的实现:
1.定义栈:
#define MaxSize 100typedef struct{int data[MaxSize]; //静态数组存放栈中元素 int top0; int top1;
}SqStack;
1.初始化栈:InitStack(&s)
void InitStack(SqStack &S){S.top0 = -1;S.top1 = MaxSize;}
2.销毁栈:DestoryStack(&L)
bool DestoryStack(SqStack &S)
{S.top0 = NULL;S.top1 = NULL;return true;
}
3.进栈:Push(&s,x)
//只演示其中一个栈
bool Push(SqStack &S,int x){if(S.top0 + 1 == top1)return false;//S.data[++S.top] = x;S.top = S.top + 1;S.data[S.top] = x;return true;}
4.出栈:Pop(&s,&x)
//只演示其中一个栈
bool Pop(SqStack &S,int &x){if(S.top0 == -1)return false;//x = S.data[S.top--];x = S.data[S.top];S.top = S.top - 1;return true;
}
5.读栈顶元素:GetTop(s,&x)
bool GetTop(SqStack &S,int &x){if(S.top0 == -1)return false;x = S.data[S.top0];return true;
}
八、链栈:
1.思维导图:
2.链栈基本操作的实现:
1.定义链栈:
typedef struct Linknode{int data;struct Linknode *next;
} *LiStack;
2.
3.
4.
5.
6.
7.
九、栈的数学性质
n个不同元素进栈,出栈元素不同排列的个数为:1/(n+1)Cn2n
数据结构之 顺序栈、共享栈、链栈相关推荐
- 数据结构之自建算法库——链栈
http://blog.csdn.net/sxhelijian/article/details/48463801 本文针对数据结构基础系列网络课程(3):栈和队列中第4课时栈的链式存储结构及其基本运算 ...
- (四)《数据结构与算法》 青岛大学-王卓 链栈
<数据结构与算法> 青岛大学-王卓 栈(链式存储)C++ 1.数据类型:栈 2.存储方式:链式存储 3.常用名称:链栈 (注:图片截取自<数据结构与算法>-青岛大学王卓bili ...
- 数据结构(严蔚敏)之四——链栈之c语言实现
编写一个程序实现链栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能: (1)初始化链栈 (2)链栈置空 (3)入栈 (4)出栈 (5)取栈顶元素 (6)遍历链栈 链栈的功能实现: #incl ...
- 十进制转换成十六进制c语言 链栈,C语言 链栈 实现十进制转换二进制,八进制,十六进制...
C语言 链栈 实现十进制转换二进制,八进制,十六进制 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 最后运行结果:代码:#incl ...
- 3.2栈和队列——链栈基本操作的实现
注意:以下内容均省略思路,只有代码.此内容为本人学习过程中的一些学习记录,如有错误,恳请各位指正.建议,末学将感激不尽! 目录 1.链栈的表示 2.链栈的初始化 3.判断链栈是否为空 4.链栈的入栈( ...
- 数据结构 队列(顺序队列 循环队列 链队列)
目录 一.引入 二.队列的定义 三.队列的抽象数据类型 四.队列的存储方式 五.队列的顺序存储(不太常用 后面5.4会给出原因) 5.1顺序存储队列的基本知识点 5.2队列的顺序存储描述 5.3顺序存 ...
- 数据结构与算法(3-1)栈(顺序栈、两栈共享空间、链栈、栈的计算器)
目录 一.顺序栈 存储结构 总代码 二.两栈共享空间 存储结构: 总代码: 三.链栈 存储结构: 总代码: 一.顺序栈 存储结构: 栈特点:先进后出,后进先出.(特殊的线性表) 入栈时在栈顶添加元素, ...
- 数据结构-顺序栈、链栈
一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...
- 【Python数据结构系列】❤️《栈(顺序栈与链栈)》——❤️知识点讲解+代码实现
灵魂拷问:为什么要学数据结构? 数据结构,直白地理解,就是研究数据的存储方式.数据存储只有一个目的,即为了方便后期对数据的再利用.因此,数据在计算机存储空间的存放,决不是胡乱的,这就要求我们选择一种好 ...
- 数据结构与算法学习笔记——链栈
数据结构与算法学习笔记(C语言) 链栈 在开始链栈的学习之前,我们先实现一下上一篇文章中提到的检查括号匹配的小程序,鉴于水平有限,本人就随便写一下代码好了,目标仅限于对功能的实现. /*用顺序栈这种数 ...
最新文章
- 机房收费系统【VB版】——添加和删除用户
- 往阿里云服务器上安装Mysql
- 根据前序、中序序列重建一棵二叉树的代码实现
- 实体识别+entity resolution
- 文本处理相关资料整理
- 19.12 添加自定义监控项目;19.13,19.14 配置邮件告警(上下);19.15 测试告警19.16...
- spring项目概念-IOCDI
- kaggle比赛数据_表格数据二进制分类:来自5个Kaggle比赛的所有技巧和窍门
- Centos系列 Curl error (37): Couldn‘t read a file:// file for file:///etc/pki/rpm-gpg/RPM-GPG-KEY-XXXX
- virtio-blk浅析[转]
- No plugin found for prefix ‘doclint‘ in the current project
- Web安全实践(11)用户名枚举
- 关于数学建模竞赛经历
- matlab GUI页面 科学计算器代码
- 数字时钟——FPGA
- 交通大数据应用细分_大数据、数据挖掘在交通领域有哪些应用?
- Excel 如何引用某表格中的某一列作为数据有效性验证
- 高德地图看各省分界线_高德地图API生成地图(含有各个省份边界线)
- Taobao api, Jingdong api, 1688api, Pinduoduo api, Douyin api commodity interface source code
- UE4 将项目压缩成最小的Zip压缩包
热门文章
- mysql router docker_MySQL Router 完全讲解
- remmima 不能保存_Vue项目实现表单登录页保存账号和密码到cookie功能_婳祎_前端开发者...
- ios 高德挪动地图获取经纬度_高德地图获取地理位置经纬度并将经维度转化为详细地址信息...
- Nat Genet | 杨俊/岳峰团队合作揭示GATA3的遗传性非编码变异增加儿童急性淋巴细胞白血病风险的新机制...
- JAMA子刊:20来岁就要控制体重!分析超8万中国人数据发现,成年到中年体重每多增加10斤,老了之后死亡风险增加10%...
- 09产品经理要明白的人性思维-营销推广篇
- python利用()写模块_介绍一下我自己写的一些Python模块
- STM32H743+CubeMX-QSPI读写外部FLASH(W25Q128JVSQ)
- Python学习之快速入门
- ab plc软件_【万泉河】PLC垃圾程序赏析2:AB RSLOGIX 5000