顺序栈、共享栈、链栈

  • 一、思维导图:
  • 二、栈的定义:
  • 三、栈的特点:
  • 四、栈的基本操作:
  • 五、常考题型:
  • 六、顺序栈:
    • 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

数据结构之 顺序栈、共享栈、链栈相关推荐

  1. 数据结构之自建算法库——链栈

    http://blog.csdn.net/sxhelijian/article/details/48463801 本文针对数据结构基础系列网络课程(3):栈和队列中第4课时栈的链式存储结构及其基本运算 ...

  2. (四)《数据结构与算法》 青岛大学-王卓 链栈

    <数据结构与算法> 青岛大学-王卓 栈(链式存储)C++ 1.数据类型:栈 2.存储方式:链式存储 3.常用名称:链栈 (注:图片截取自<数据结构与算法>-青岛大学王卓bili ...

  3. 数据结构(严蔚敏)之四——链栈之c语言实现

    编写一个程序实现链栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能: (1)初始化链栈 (2)链栈置空 (3)入栈 (4)出栈 (5)取栈顶元素 (6)遍历链栈 链栈的功能实现: #incl ...

  4. 十进制转换成十六进制c语言 链栈,C语言 链栈 实现十进制转换二进制,八进制,十六进制...

    C语言 链栈 实现十进制转换二进制,八进制,十六进制 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 最后运行结果:代码:#incl ...

  5. 3.2栈和队列——链栈基本操作的实现

    注意:以下内容均省略思路,只有代码.此内容为本人学习过程中的一些学习记录,如有错误,恳请各位指正.建议,末学将感激不尽! 目录 1.链栈的表示 2.链栈的初始化 3.判断链栈是否为空 4.链栈的入栈( ...

  6. 数据结构 队列(顺序队列 循环队列 链队列)

    目录 一.引入 二.队列的定义 三.队列的抽象数据类型 四.队列的存储方式 五.队列的顺序存储(不太常用 后面5.4会给出原因) 5.1顺序存储队列的基本知识点 5.2队列的顺序存储描述 5.3顺序存 ...

  7. 数据结构与算法(3-1)栈(顺序栈、两栈共享空间、链栈、栈的计算器)

    目录 一.顺序栈 存储结构 总代码 二.两栈共享空间 存储结构: 总代码: 三.链栈 存储结构: 总代码: 一.顺序栈 存储结构: 栈特点:先进后出,后进先出.(特殊的线性表) 入栈时在栈顶添加元素, ...

  8. 数据结构-顺序栈、链栈

    一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...

  9. 【Python数据结构系列】❤️《栈(顺序栈与链栈)》——❤️知识点讲解+代码实现

    灵魂拷问:为什么要学数据结构? 数据结构,直白地理解,就是研究数据的存储方式.数据存储只有一个目的,即为了方便后期对数据的再利用.因此,数据在计算机存储空间的存放,决不是胡乱的,这就要求我们选择一种好 ...

  10. 数据结构与算法学习笔记——链栈

    数据结构与算法学习笔记(C语言) 链栈 在开始链栈的学习之前,我们先实现一下上一篇文章中提到的检查括号匹配的小程序,鉴于水平有限,本人就随便写一下代码好了,目标仅限于对功能的实现. /*用顺序栈这种数 ...

最新文章

  1. 机房收费系统【VB版】——添加和删除用户
  2. 往阿里云服务器上安装Mysql
  3. 根据前序、中序序列重建一棵二叉树的代码实现
  4. 实体识别+entity resolution
  5. 文本处理相关资料整理
  6. 19.12 添加自定义监控项目;19.13,19.14 配置邮件告警(上下);19.15 测试告警19.16...
  7. spring项目概念-IOCDI
  8. kaggle比赛数据_表格数据二进制分类:来自5个Kaggle比赛的所有技巧和窍门
  9. Centos系列 Curl error (37): Couldn‘t read a file:// file for file:///etc/pki/rpm-gpg/RPM-GPG-KEY-XXXX
  10. virtio-blk浅析[转]
  11. No plugin found for prefix ‘doclint‘ in the current project
  12. Web安全实践(11)用户名枚举
  13. 关于数学建模竞赛经历
  14. matlab GUI页面 科学计算器代码
  15. 数字时钟——FPGA
  16. 交通大数据应用细分_大数据、数据挖掘在交通领域有哪些应用?
  17. Excel 如何引用某表格中的某一列作为数据有效性验证
  18. 高德地图看各省分界线_高德地图API生成地图(含有各个省份边界线)
  19. Taobao api, Jingdong api, 1688api, Pinduoduo api, Douyin api commodity interface source code
  20. UE4 将项目压缩成最小的Zip压缩包

热门文章

  1. mysql router docker_MySQL Router 完全讲解
  2. remmima 不能保存_Vue项目实现表单登录页保存账号和密码到cookie功能_婳祎_前端开发者...
  3. ios 高德挪动地图获取经纬度_高德地图获取地理位置经纬度并将经维度转化为详细地址信息...
  4. Nat Genet | 杨俊/岳峰团队合作揭示GATA3的遗传性非编码变异增加儿童急性淋巴细胞白血病风险的新机制...
  5. JAMA子刊:20来岁就要控制体重!分析超8万中国人数据发现,成年到中年体重每多增加10斤,老了之后死亡风险增加10%...
  6. 09产品经理要明白的人性思维-营销推广篇
  7. python利用()写模块_介绍一下我自己写的一些Python模块
  8. STM32H743+CubeMX-QSPI读写外部FLASH(W25Q128JVSQ)
  9. Python学习之快速入门
  10. ab plc软件_【万泉河】PLC垃圾程序赏析2:AB RSLOGIX 5000