参考书:王道考研数据结构

(此贴为博主学习408的笔记,因博主也是学习者,个人总结如有错误欢迎指正。如有侵权请告知,马上删除致歉)​​

目录

一:栈的定义

二:常用的基本操作

三:操作代码

1.栈的顺序存储类型描述

2. 栈判空

3.初始化一个栈

4.进栈

5.出栈

6.读取栈顶元素

7.清空栈

8.销毁栈

9.遍历输出

四:完整代码


一:栈的定义

栈(Stack)是一种后进先出的线性表,限定这种类型的线性表为只能在某一端进行插入和删除操作。

基于栈的特性,我们把它称作后进先出表(Last in First out)LIFO。

常用术语:

栈顶(Top):线性表允许插入和删除的那一端。

栈底:不可操作的那一端。

空栈:不包含任何元素的空表。

二:常用的基本操作

在国内计算机研究生考试中,如果没有明确规定操作名称,题干没有给出限制,则可以直接使用这些常用操作函数。

以下是基于严蔚敏版的基本操作:

InitStack(&S):        初始化一个空表。

StackEmpty(&S):   判断栈是否为空,若为空则返回true,否则为false。

Push(&S,x):           进栈,若栈未满,则将新元素插入到S.top+1的位置。

Pop(&S,&x):          出栈,若栈未空,则将栈顶S.top元素赋值给x,并将Top指针-1。

GetTop(S,&x) :      读取栈顶元素,若栈未空,将栈顶元素赋值给x

DestroyStack(&S):销毁栈,并释放栈所用空间。

ClearStack(&S):    清空栈,将Top指针指向-1的初始化位置。

三:操作代码

1.栈的顺序存储类型描述

#define MaxSize 10/**栈的顺序存储类型描述栈顶指针S.top,初始化时设置S.top=-1;栈顶元素S.data[S.top];
**/
typedef struct SqStack{int data[MaxSize];//存放栈元素int top;    //栈顶指针
}SqStack;

2. 栈判空       

/**栈判空
**/
bool StackEmpty(SqStack S){if(S.top==-1) //栈空return true;else return false;
}

功能演示

3.初始化一个栈

/**初始化一个栈,并将栈顶指针指向-1
*/
void InitStack(SqStack &S){S.top = -1; //初始化栈顶指针
}

4.进栈

/**进栈
**/
bool Push(SqStack &S,int x){if(S.top==MaxSize-1) //栈顶指针指向最后一个,栈满,报错,因为数组下标从0开始,数组下标最大值为Max-1return false;S.data[++S.top] = x; //应熟练掌握++i和i++的区别,这里因为top指针指向的是栈目前最后一个元素,需要将指针移到下一个再装填新元素,否则会覆盖,所以使用++S.top。return true;
}

功能演示

5.出栈

/**出栈
*/
bool Pop(SqStack &S,int &x){if(S.top==-1)return false;x = S.data[S.top--]; //将栈顶元素弹出,指针往下-1。return true;
}

功能演示

6.读取栈顶元素

/**读取栈顶元素
*/
int GetTop(SqStack S){if(S.top==-1)return false;int x = S.data[S.top];return x;
}

功能演示

7.清空栈

/*清空栈
*/
bool ClearStack(SqStack &S){if(S.top==-1)return false;S.top=-1;     //将栈顶指针指向-1,遍历的时候到top就结束return true;
}

8.销毁栈

/**销毁栈
*/
bool DestroyStack(SqStack &S){if(S.top==-1)return false;free(S.data);return true;
}

9.遍历输出

/**遍历输出栈
*/
bool PrintStack(SqStack S){if(S.top==-1){printf("栈为空");return false;}for(int i =0;i<=S.top;i++){printf("          |%d|\n",S.data[S.top-i]);}return true;
}

功能演示

四:完整代码

#include <stdio.h>
#include <stdlib.h>/**********************************************
制作人:祝星。
项目名称:数据结构-顺序栈的基本操作(C语言实现)
完成时间:2022年7月21日
完成内容:栈的定义,创建,判空
运行环境:win10
程序环境:VC++
文件语言:C语言
文件类型:.cpp
注:1.VC++的.cpp环境,&为取地址。
***********************************************/#define MaxSize 10/**栈的顺序存储类型描述栈顶指针S.top,初始化时设置S.top=-1;栈顶元素S.data[S.top];
**/
typedef struct SqStack{int data[MaxSize];//存放栈元素int top;    //栈顶指针
}SqStack;/**栈判空
**/
bool StackEmpty(SqStack S){if(S.top==-1) //栈空return true;else return false;
}/**初始化一个栈,并将栈顶指针指向-1
*/
void InitStack(SqStack &S){S.top = -1; //初始化栈顶指针
}/**进栈
**/
bool Push(SqStack &S,int x){if(S.top==MaxSize-1) //栈顶指针指向最后一个,栈满,报错,因为数组下标从0开始,数组下标最大值为Max-1return false;S.data[++S.top] = x; //应熟练掌握++i和i++的区别,这里因为top指针指向的是栈目前最后一个元素,需要将指针移到下一个再装填新元素,否则会覆盖,所以使用++S.top。return true;
}/**出栈
*/
bool Pop(SqStack &S,int &x){if(S.top==-1)return false;x = S.data[S.top--]; //将栈顶元素弹出,指针往下-1。return true;
}/**读取栈顶元素
*/
int GetTop(SqStack S){if(S.top==-1)return false;int x = S.data[S.top];return x;
}/*清空栈
*/
bool ClearStack(SqStack &S){if(S.top==-1)return false;S.top=-1;     //将栈顶指针指向-1,遍历的时候到top就结束return true;
}/**销毁栈
*/
bool DestroyStack(SqStack &S){if(S.top==-1)return false;free(S.data);return true;
}/**遍历输出栈
*/
bool PrintStack(SqStack S){if(S.top==-1){printf("栈为空");return false;}for(int i =0;i<=S.top;i++){printf("          |%d|\n",S.data[S.top-i]);}return true;
}int main(){SqStack S;InitStack(S);int chose;int push,pop;printf("\n---------------------------------------------\n");printf("请选择功能:\n1:入栈   2:出栈  3:判空  4:读取栈顶元素 4:遍历  6:清空栈 7:销毁栈\n");scanf("%d",&chose);while(chose == 0 || chose == 1 ||chose == 2 ||chose == 3 ||chose == 4 ||chose == 5 ||chose == 6 ||chose == 7 ){switch(chose){case 0:scanf("%d",&chose);continue;case 1:printf("请输入入栈数:");scanf("%d",&push);Push(S,push);printf("入栈后为:\n");PrintStack(S);chose = 0;break;case 2:Pop(S,pop);printf("将栈顶元素 %d 出栈\n",pop);printf("出栈后为:\n");PrintStack(S);pop = NULL;chose = 0;break;case 3:if(StackEmpty(S)){printf("栈空\n");}elseprintf("栈不为空\n");chose = 0;break;case 4:printf("栈顶元素为%d",GetTop(S));chose = 0;break;case 5:PrintStack(S);chose = 0;break;case 6:ClearStack(S);printf("清空栈\n");chose = 0;break;case 7:DestroyStack(S);printf("销毁栈\n");chose = 0;break;}printf("\n---------------------------------------------\n");printf("请选择功能:\n1:入栈   2:出栈  3:判空  4:读取栈顶元素 5:遍历  6:清空栈 7:销毁栈\n");}return 0;
}

数据结构-顺序栈的基本操作(C语言实现)相关推荐

  1. c语言顺序栈完整程序,顺序栈的基本操作(C语言)

    由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址  但是这种用法好像C并不 ...

  2. 顺序栈的基本操作c语言源代码,顺序栈的栈基本操作(C语言版)

    1 #include 2 #include 3 #define STACK_INIT_SIZE 100//储存空间初始分配量 4 #define STACKINCREMENT 10//存储空间分配增量 ...

  3. 【C++】【数据结构】顺序栈的基本操作(初始化、入栈、出栈、取栈顶元素、遍历输出栈)的算法实现附全代码

    C++实现顺序栈的算法+步骤(附全代码): 使用c++完成数据结构顺序栈的基本操作,包括(初始化.入栈.出栈.取栈顶元素.遍历输出栈等),可直接编译运行. 顺序栈的定义如下: #define MAXS ...

  4. C语言实现顺序栈的基本操作(初始化、判断空、入栈、出栈、获取栈顶元素)

    //顺序栈的基本操作 #include<stdio.h> #define MaxSize 50 typedef int ElemType; //定义栈结构体 typedef struct ...

  5. java顺序栈_顺序栈的基本操作(入栈和出栈)

    顺序栈的基本操作(入栈和出栈) 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如何使用顺序 ...

  6. 数据结构——顺序栈和链式栈的简单实现和解析(C语言版)

    摘自:数据结构学习--顺序栈和链式栈的简单实现和解析(C语言版) 作者:正弦定理 发布时间:2020-11-26 21:26:49 网址:https://blog.csdn.net/chineseko ...

  7. C语言 数据结构 顺序栈的实现 进栈 出栈 初始化

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.代码实现 前言 顺序栈是栈的顺序实现.顺序栈是指利用顺序存储结构实现的栈.采用地址连续的存储空间(数组)依次存储栈 ...

  8. python 顺序栈及基本操作

    顺序栈 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如何使用顺序表模拟栈以及实现对栈中数 ...

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

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

  10. 重学数据结构004——栈的基本操作及实现(数组实现)

    上文提到过栈以及栈的基本操作.上文中是基于链表做的实现.但是这种方法会出现大量的malloc()和free()操作,这种开销是非常昂贵的. 另外一种实现方式是基于数组的实现.这种实现方式需要预先制定一 ...

最新文章

  1. 【报告】2021物联网行业研究报告(附PDF下载)
  2. 微软小冰评分接口_微软小冰测颜值准不准?郑爽才得6.3分,较真你就输了
  3. HDU - 4027 Can you answer these queries?(线段树)
  4. Servlet之间的跳转
  5. 电气与计算机学院院长论坛报告,自动化学院分论坛第十、十一次专家报告会圆满成功...
  6. docker host and docker container
  7. jQuery-1.9.1源码分析系列(十) 事件系统——事件包装
  8. android MySQL servlet_使用MySQL和Servlet编写Android接口样例
  9. MySQL数据教程(一)数据库概念,超详细安装和配置数据库,数据库可视化界面介绍
  10. 自助BI项目实施可行性分析报告
  11. 【计算机基础】五笔字根分解图
  12. 深入浅出Alpha Zero技术原理
  13. 单芯片无线供电IC 无线充电芯片 无线输电芯片FS68001
  14. ubuntu 批量压缩图片
  15. echarts做中国地图分布
  16. 第一篇:个人感悟----懒惰是人类最大的敌人
  17. CC(Smart3D)航拍影像结合激光雷达创建实景三维模型(视频教程可下载)
  18. 沪深A股分析数据财务分析信息API接口(JSON标准格式,Get请求方式)
  19. API-String类、基本数据类型对象包装类
  20. mysql 启动时,服务无法启动:发生系统错误1067.

热门文章

  1. Python 爬取zw年鉴
  2. 计算机模板是什么意思,Office
  3. 《HTTP权威指南》读书笔记---HTTP概述
  4. 解决华为手机用rem单位,内容超出屏幕宽度问题
  5. MATLAB常用画图函数
  6. Java基础———第一弹
  7. 啊哈C语言 第7章 有了它你能做更多的事(第27-28讲)
  8. 慕课版软件质量保证与测试(第一章.课后作业)
  9. IDEA Spring环境搭建+简单入门(图文教程)
  10. 知识图谱嵌入:TransE算法原理及代码详解