栈和队列
栈和队列
什么是栈
栈存储结构与之前学习的线性存储结构有所差异,这缘于栈对数据“存”和“取”的过程有特殊的要求:
栈只能从表的一端存取数据,另一端是封闭的
在栈中,无论是存数据还是取数据,都必须遵循“先进后出”的原则,即最先进栈的元素最后出栈。
因此,栈是一种只能从表的一端存取数据且遵循“先进后出”原则的线性存储结构。
进栈和出栈
在实际应用中,通常只会对栈执行以下两种操作:
l 向栈中添加元素,此过程被称为“进栈”(入栈或压栈)
l 从栈中取出元素,此过程被称为“出栈”(或弹栈)
栈的具体实现
栈是一种“特殊”的线性存储结构,具体实现有以下两种方式:
顺序栈
链栈
两种实现方式的区别,仅限于数据元素在实际物理空间上存放的相对位置,顺序栈底层采用的是数组;链栈底层采用的是链表。
栈的应用
l 浏览器的“回退”功能
l 检测代码中的括号匹配问题
l 数值的进制转换功能
l …
顺序栈实现及其基本操作
见代码。
链栈实现及其基本操作
见代码。
什么是队列
与栈结构不同的是,队列的两端都是“开口”,要求数据只能从一端进,从另一端出。
通常,称进数据的一端为 “队尾”,出数据的一端为 “队头”,数据元素进队列的过程称为 “入队”,出队列的过程称为 “出队”。
队列中数据的进出要遵循“先进先出”的原则。
注意:栈和队列不要混淆,栈结构是一端开口,特点是”先进后出”;而队列的两端全是开口,特点是”先进先出”。
队列的实现
队列存储结构的实现有以下两种方式:
顺序队列 :在 顺序表 的基础上实现的队列结构;
链队列:在 链表 的基础上实现的队列结构;
队列的实际应用
l 排队做核算
l 排队挂号(医院的挂号系统)
l …
顺序队列实现及其基本操作
见代码。
链式队列实现及其基本操作
见代码。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 码农小山!
评论