是限定仅在表尾进行插入或删除操作的线性表,表尾称为栈顶(top),表头称为栈底(bottom)。栈的最主要特点就是“先进后出”(FILO),或“后进先出”(LIFO)。本文在介绍栈的基本概念的基础上,重点介绍栈的顺序表示及相应的算法


定义

用顺序存储方式实现的栈称为顺序栈,顺序栈对应于顺序表。

设栈中的数据元素的类型是整型,用一个足够长的一维数组s来存放元素,数组的最大容量为STACK_INTSIZE。同时假设栈顶指针top。(在以下的程序中,top不是指向当前的栈顶元素,而是指向下一次将要进栈的元素的存储位置)

顺序栈可以描述如下:

#define STACK_INTSIZE 50 /*分配栈的最大存储空间*/
#define DataType int /*定义栈中数据元素的类型*/
DataType s[STACK_INTSIZE];/*用来存放栈中数据元素的内存空间*/
int top;/*定义栈顶指针*/

可以用结构体数组来实现顺序栈:

#define STACK_INTSIZE 50
#define DataType int
typedef struct
{DataType s[STACK_INTSIZE];int top;
} Stack;
Stack *st;/*指针st用来引用一个顺序栈*/

栈顶指针动态地反映了栈中元素的变化情况,top=0时,表示空栈top=1时,表示已经有一个元素进栈进栈时,栈顶指针top上移,top加1top=STACK_INTSIZE,表示栈满出栈时,栈顶指针top下移,top减1

1.建立空栈

Stack *InitStack()
{Stack *s;s = (Stack *)malloc(sizeof(Stack));s->top = 0;return s;
}

2.进栈

void Push(Stack *st, DataType x)
{if (st->top >= STACK_INTSIZE)printf("栈已满,不能入栈!\n");/*若栈满则不能进栈,输出出错信息*/else{st->s[st->top] = x;/*元素x进栈*/st->top++;/*栈顶指针top加1*/}
}

3.出栈

void Pop(Stack *st)
{if (st->top == 0)printf("栈空,不能出栈!\n");/*若栈空则不能出栈,且输出栈空的信息*/else/*栈非空*/{st->top--;/*top减1,元素出栈*/}
}

4.读栈顶元素

DataType ReadTop(Stack *st)
{DataType x;if (st->top == 0){printf("栈中无元素");return (0);}/*若栈空则返回0*/else{x = st->s[st->top-1];/*取栈顶元素*/return (x);/*返回x即栈顶元素的值*/}
}

5.遍历栈

结合元素出栈算法和读取栈顶元素算法,使用循环,当st->top=0时结束循环,即可遍历栈

void ShowStack(Stack *st)
{while (st->top > 0){st->top--;printf("%d", st->s[st->top]);}
}

参考文献:

文益民 张瑞霞 李健 编著,数据结构与算法(第2版),清华大学出版社,P40,P42-45.

C语言丨栈(一):顺序栈相关推荐

  1. C语言实现了一个顺序栈(附完整源码)

    C语言实现了一个顺序栈 顺序栈 顺序栈结构示意图如下 C语言实现了一个顺序栈完整源码 顺序栈 用一段连续的存储空间来存储栈中的数据元素,比较常见的是用数组来实现顺序栈 顺序存储结构:1.元素所占的存储 ...

  2. java栈实现--顺序栈

    顺序栈 一.实现过程 1.提供栈接口:IStack 2.提供顺序栈的实现:ShunxuStack 3.提供判空(isEmpty).栈深度(length)等计算方法. 4.提供清空栈的方法:clear( ...

  3. 数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)

    目录 一.栈 (一)栈的概念 (二)栈的排列 (三)共享栈 (四)栈的常见应用 二.顺序栈的定义 三.顺序栈的初始化 四.判断顺序栈是否为空栈 五.判断顺序栈是否为满栈 六.进栈(插入操作) 七.出栈 ...

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

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

  5. c语言建立栈(顺序栈、双栈和链式栈)

    c语言建立栈 顺序存储 栈的顺序存储定义 初始化栈 入栈操作 出栈操作 其余操作 读取栈顶元素 栈中元素个数 栈是否为空 双栈 双栈的顺序存储结构定义 建立双栈 判断栈为空 进栈操作 出栈操作 链式栈 ...

  6. c语言存储的逻辑顺序,栈是不是顺序储存的线性结构啊?

    栈是不是顺序储存的线性结构啊?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 栈是不是顺序储存的线性结构啊? 呃~弄明白 ...

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

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

  8. c语言堆栈基本代码入栈出栈_顺序栈基本操作(入栈和出栈)C语言详解

    顺序,即用{1,2,3,4},存储状态如 图 1 顺序表存储 {1,2,3,4} 同样,使用栈存储结构存储 {1,2,3,4},其存储状态如图 2 所示: 图 2 栈结构存储 {1,2,3,4} 通过 ...

  9. C语言 迷宫问题求解(顺序栈应用示例)

    [cpp] view plaincopy //顺序栈的应用:迷宫 //作者:nuaazdh //时间:2011年12月7日 #include <stdio.h> #include < ...

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

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

最新文章

  1. 【CAD制图视频】AutoCAD 2014 高手之道
  2. 《20170911-构建之法:现代软件工程-阅读笔记》
  3. bbb mmc_blk_probe 分析
  4. WinCE6.0中应用程序如何直接访问物理空间
  5. x264_macroblock_cache_load()
  6. centos 断电重启后,文件系统损坏修复
  7. mysql nhibernate_C#连接Mysql数据库NHibernate
  8. java学习-BeanUtils给对象的属性赋值
  9. lvs+keepalived配置
  10. FastDFS(提升磁盘IO性能的几个技巧 FastDFS 5.04之IO读事件)
  11. WebRequestDataBinder实现将请求参数映射为POJO对象
  12. iOS codeview
  13. php保存必应壁纸,README.md · 墨涩/自动下载每日必应壁纸到指定文件夹php源码 - Gitee.com...
  14. viso 2013 如何增加连接点【画多条直线】
  15. vue+barcode实现扫一扫功能
  16. java 读取.xlsx_java 读取xlsx
  17. 中国微单相机市场深度研究分析报告
  18. 计算机组成原理实验报告 算术逻辑单元ALU实验(源代码全)
  19. python处理时间格式时分秒_python将时分秒转换成秒的实例
  20. java会使电脑越来越慢吗_电脑越来越慢很卡怎么办

热门文章

  1. SqlServer2008R2镜像(无域)
  2. window.location.href重定向 不会触发webview
  3. Android录制音频的三种方式
  4. MessageBox模态对话框[转]
  5. BTREE与其它索引的优缺点对比
  6. ARM处理器基本指令大全
  7. (篇八)C语言在母串删子串、输入位置截取子串
  8. python爬虫加强版!!!!想爬哪个队伍就爬那个
  9. python控制台进度条_python在控制台输出进度条的方法
  10. Python多线程编程基础1:为什么要使用线程