什么是堆栈组织结构?
堆栈 也被称为后进先出 (LIFO) 列表。它是CPU 中最重要的特性之一。它保存数据,以便最后存储的元素首先被检索。堆栈是一个带有地址寄存器的内存单元。该寄存器影响堆栈的地址,称为堆栈指针 (SP)。堆栈指针持续地影响位于堆栈顶部的元素的地址。
它可以将元素插入堆栈或从堆栈中删除元素。插入操作称为 push 操作,删除操作称为 pop 操作。在计算机堆栈中,这些操作通过增加或减少 SP 寄存器来模拟。
寄存器堆栈
堆栈可以排列为一组内存字或寄存器。考虑一个如图所示排列的 64 字寄存器堆栈。堆栈指针寄存器包含一个二进制数,它是堆栈顶部元素的地址。三个元素 A、B 和 C 位于堆栈中。
元素 C 位于堆栈顶部,堆栈指针持有 C 的地址,即 3。顶部元素通过读取地址 3 处的内存字并将堆栈指针递减 1 来从堆栈中弹出。然后,B 位于堆栈顶部,SP 持有 B 的地址,即 2。可以插入一个新字,通过将堆栈指针递增 1 并将字插入到递增的位置来压入堆栈。

堆栈指针包含 6 位,因为 26 = 64,并且 SP 不能超过 63(二进制中的 111111)。毕竟,如果将 63 递增 1,则结果为 0(111111 + 1 = 1000000)。SP 只保存六个最低有效位。如果将 000000 递减 1,则结果为 111111。
因此,当堆栈已满时,一位寄存器“FULL”被设置为 1。如果堆栈为空,则一位寄存器“EMTY”被设置为 1。数据寄存器 DR 保存构成或读出的二进制信息堆栈。
首先,将 SP 设置为 0,EMTY 设置为 1,FULL 设置为 0。现在,由于堆栈未满 (FULL = 0),因此使用 push 操作插入新元素。
push 操作按如下方式执行:
| SP←SP + 1 | 它可以递增堆栈指针 |
| K[SP] ← DR | 它可以将元素写入堆栈顶部 |
| 如果 (SP = 0) 则 (FULL ← 1) | 检查堆栈是否已满 |
| EMTY ← 0 | 标记堆栈非空 |
堆栈指针递增 1,并将下一个较高字的地址保存在 SP 中。来自 DR 的字使用内存写入操作插入到堆栈中。第一个元素保存在地址 1 处,最后一个元素保存在地址 0 处。如果堆栈指针位于 0,则堆栈已满,并且“FULL”设置为 1。这是 SP 位于 63 位置并且在递增 SP 后,最后一个元素保存在地址 0 处的条件。当元素保存在地址 0 处时,堆栈中没有更多空寄存器。堆栈已满,“EMTY”设置为 0。
如果堆栈非空(如果 EMTY = 0),则从堆栈中删除新元素。pop 操作包括以下微操作序列:
| DR←K[SP] | 它可以从堆栈顶部读取元素 |
| SP ← SP – 1 | 它可以递减堆栈指针 |
| 如果 (SP = 0) 则 (EMTY ← 1) | 检查堆栈是否为空 |
| FULL ← 0 | 标记堆栈未满 |
从堆栈中读取顶部元素并传输到 DR,从而递减堆栈指针。如果堆栈指针达到 0,则堆栈为空,并且“EMTY”设置为 1。这是从位置 1 读取元素并将 SP 递减 1 的情况。
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP