C语言丨栈(一):顺序栈
栈是限定仅在表尾进行插入或删除操作的线性表,表尾称为栈顶(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加1;top=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语言丨栈(一):顺序栈相关推荐
- C语言实现了一个顺序栈(附完整源码)
C语言实现了一个顺序栈 顺序栈 顺序栈结构示意图如下 C语言实现了一个顺序栈完整源码 顺序栈 用一段连续的存储空间来存储栈中的数据元素,比较常见的是用数组来实现顺序栈 顺序存储结构:1.元素所占的存储 ...
- java栈实现--顺序栈
顺序栈 一.实现过程 1.提供栈接口:IStack 2.提供顺序栈的实现:ShunxuStack 3.提供判空(isEmpty).栈深度(length)等计算方法. 4.提供清空栈的方法:clear( ...
- 数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)
目录 一.栈 (一)栈的概念 (二)栈的排列 (三)共享栈 (四)栈的常见应用 二.顺序栈的定义 三.顺序栈的初始化 四.判断顺序栈是否为空栈 五.判断顺序栈是否为满栈 六.进栈(插入操作) 七.出栈 ...
- 【Python数据结构系列】❤️《栈(顺序栈与链栈)》——❤️知识点讲解+代码实现
灵魂拷问:为什么要学数据结构? 数据结构,直白地理解,就是研究数据的存储方式.数据存储只有一个目的,即为了方便后期对数据的再利用.因此,数据在计算机存储空间的存放,决不是胡乱的,这就要求我们选择一种好 ...
- c语言建立栈(顺序栈、双栈和链式栈)
c语言建立栈 顺序存储 栈的顺序存储定义 初始化栈 入栈操作 出栈操作 其余操作 读取栈顶元素 栈中元素个数 栈是否为空 双栈 双栈的顺序存储结构定义 建立双栈 判断栈为空 进栈操作 出栈操作 链式栈 ...
- c语言存储的逻辑顺序,栈是不是顺序储存的线性结构啊?
栈是不是顺序储存的线性结构啊?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 栈是不是顺序储存的线性结构啊? 呃~弄明白 ...
- c语言顺序栈完整程序,顺序栈的基本操作(C语言)
由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址 但是这种用法好像C并不 ...
- c语言堆栈基本代码入栈出栈_顺序栈基本操作(入栈和出栈)C语言详解
顺序,即用{1,2,3,4},存储状态如 图 1 顺序表存储 {1,2,3,4} 同样,使用栈存储结构存储 {1,2,3,4},其存储状态如图 2 所示: 图 2 栈结构存储 {1,2,3,4} 通过 ...
- C语言 迷宫问题求解(顺序栈应用示例)
[cpp] view plaincopy //顺序栈的应用:迷宫 //作者:nuaazdh //时间:2011年12月7日 #include <stdio.h> #include < ...
- 数据结构与算法(3-1)栈(顺序栈、两栈共享空间、链栈、栈的计算器)
目录 一.顺序栈 存储结构 总代码 二.两栈共享空间 存储结构: 总代码: 三.链栈 存储结构: 总代码: 一.顺序栈 存储结构: 栈特点:先进后出,后进先出.(特殊的线性表) 入栈时在栈顶添加元素, ...
最新文章
- 【CAD制图视频】AutoCAD 2014 高手之道
- 《20170911-构建之法:现代软件工程-阅读笔记》
- bbb mmc_blk_probe 分析
- WinCE6.0中应用程序如何直接访问物理空间
- x264_macroblock_cache_load()
- centos 断电重启后,文件系统损坏修复
- mysql nhibernate_C#连接Mysql数据库NHibernate
- java学习-BeanUtils给对象的属性赋值
- lvs+keepalived配置
- FastDFS(提升磁盘IO性能的几个技巧 FastDFS 5.04之IO读事件)
- WebRequestDataBinder实现将请求参数映射为POJO对象
- iOS codeview
- php保存必应壁纸,README.md · 墨涩/自动下载每日必应壁纸到指定文件夹php源码 - Gitee.com...
- viso 2013 如何增加连接点【画多条直线】
- vue+barcode实现扫一扫功能
- java 读取.xlsx_java 读取xlsx
- 中国微单相机市场深度研究分析报告
- 计算机组成原理实验报告 算术逻辑单元ALU实验(源代码全)
- python处理时间格式时分秒_python将时分秒转换成秒的实例
- java会使电脑越来越慢吗_电脑越来越慢很卡怎么办