【数据结构】栈 (顺序的基础操作) (C语言版)
本来这个大坑是没时间填了的,但是竟然可以填完这个大坑了。

栈的定义
课本介绍:栈是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊含义,称为栈顶(top),相应的,表头称为栈底(bottom)。不含元素的空表称为空栈。

栈的定义没啥说的,就一个先进后出的容器。如果需要按照保存数据时相反的顺序来使用数据,则可以使用栈来实现。

案例引入
1.数制的转换(进制转换)
2.括号匹配的检验
3.表达式求值
4.舞伴问题
这些案例的实现会放到下一个专栏写。

顺序栈的定义,表示,实现
1.顺序栈的定义(也是顺序栈的存储结构)
顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top栈顶元素在顺序栈中的位置。当 和
的值相等时,表示空栈。
关于 ,其实就是
,为什么定义那么复杂课本上也早就说过,是为了统一数据类型而定,是根据个人需求来的。其实跟 int 没有实质性的不同。包括后面会出现的
都在这篇文章定义过了。

说明
(1)若 为
,则表明栈结构不存在。
(2)栈空时, 和
的值相等,非空时,
始终指向栈顶元素的上一个位置。
2.顺序栈的初始化
也没什么好说的,就是把 初始为
,表示栈空。
3.入栈
(1)先判断栈是否满,满了返回。
(2)将新元素压入栈顶,栈顶指针。
4.出栈
(1)先判断栈是否为空,空了没有元素应当返回
(2)栈顶指针, 栈顶元素出栈。

到这里其实这篇专栏是可以不写的了,但其实之前写了两篇没有再坚持是因为课本上的一些繁杂定义确实是有点不太适合,这也是我之前不打算再写课本上的数据结构代码的一个主要原因(但是现在有时间了, 还挺闲的)。这里会稍微写一点 的
容器的内容。(以下代码可以直接复制粘贴到编译器里面编译运行)
比课本上简单很多,也省去了指针越界的麻烦,但是容器本身越界还是会报错的,一行代码就解决了课本上好几行代码的事情(虽然但是,在数据量极其大的时候,还是手搓的数据结构跑得快)有精力的话建议学习一下
,能将很多抽象的数据结构具体化一些。
好久没写了,有错误请指正。


