什么是堆栈/堆栈指针:类型及其应用程序

堆栈只不过是插入和删除仅在一端发生的线性数据结构。插入操作具有称为PUSH的特殊名称,删除操作也具有称为POP的特殊名称。推送和流行是两个可以仅在特定堆栈中进行的两个基本操作。它是一组内存位置,内存位置与读取存储器或写入存储器有关。这用于在执行程序期间存储二进制信息,当我们正在执行任何程序时,该程序的内容将用于存储在堆栈中。它跟随后进先出(LIFO),它仅用于存储和检索数据但不用于存储数据。下面讨论堆栈/堆栈指针的简要说明。

什么是堆栈/堆栈指针?

定义:堆栈是存储设备,用于以LIFO的方式存储信息或数据(首先持续)。每当我们以LIFO方式的形式输入数据时,首先要删除的元素是最后的插入元素,因此最近插入的元素首先取出。它是名为堆栈指针(SP)的地址寄存器内的存储器单元。堆栈指针始终指示堆栈中的顶部元素,这意味着数据必须插入数据的位置。


堆栈的类型

它们是寄存器堆栈和内存堆栈有两种类型的堆栈。

注册堆栈

寄存器堆栈还是存储器单元中存在的存储器设备,但它仅处理少量数据。堆叠深度总是限制在寄存器堆栈中,因为与存储器相比,寄存器堆栈的大小非常小。

推送寄存器堆栈中的操作

步骤1:堆栈指针递增1。

SP←SP + 1


第2步:将数据输入堆栈。

m [sp]←博士

DR是数据寄存器

第3步:检查堆栈是否已满

如果(sp = 0)那么(完整←1)

第四步:标记不空

空←0

寄存器堆栈中的POP操作

步骤1:从堆栈中读取数据。

议程←m [sp]

第2步:减少堆栈点。

SP←SP-1

第3步:检查堆栈是否为空

如果sp = 0则空←1

64位寄存器堆栈的堆栈组织如下图所示。

注册堆栈组织
注册堆栈组织

内存堆栈

在内存堆栈中,堆栈深度是灵活的。它占据了大量的存储器数据,而在寄存器堆栈中,将仅存储有限数量的内存单词。

在内存堆栈中推动操作

步骤1:SP←SP-1

第2步:m [sp]←博士

内存堆栈中的流行操作

步骤1:议程←m [sp]

第2步:SP←SP-1

与寄存器单元进行比较,存储器单元存储大量数据。内存堆栈图如下图所示。

内存堆栈
内存堆栈

总存储器单元被分成三个部分,第一存储器单元具有程序(除了指令之外),第二部分是数据(操作数),第三部分是堆栈。程序指令始终存储在程序计数器(PC)中,数据寄存器由地址寄存器(AR)识别。用于堆栈的地址3000至4001和第一项或元素存储在4001。

8085微处理器中的堆叠/堆叠指针

8085的程序员视图微处理器包含通用寄存器和专用寄存器。通用寄存器是A,B,C,D,E,H,L,并且特殊用途寄存器是SP(堆栈指针)和PC(程序计数器)。8085微处理器的程序员视图如下图所示。

程序员查看8085
程序员查看8085

堆栈指针是16位寄存器包含存储器地址,假设堆栈指针(SP)内容是FC78H,然后微处理器8085解释它。存储器位置将来自FC78H到FFFH的有用信息,并且从FC77H到0000H,存储器位置没有有用的信息。堆栈指针的解释如下图所示。

解释堆栈指针
解释堆栈指针

堆栈/堆栈指针的基本操作

堆叠有两个操作它们是:推动操作和流行操作。

推动操作

推送装置将元素推入堆叠中。推送操作始终递增堆栈指针,弹出操作始终递减堆栈指针。在推送操作的情况下,我们必须检查是否有自由空间可用。如果可用空间可用,我们可以转到推送操作,如果不可用空间,则会发生错误消息溢出。溢出分别在推动操作时检查。推送和流行的基本操作如下图所示。

推动和流行的基本操作
推动和流行的基本操作

图(a)是堆栈。如果要将一个插入元素插入堆栈的元素,则必须推动(s,a),除了堆栈之外。在堆栈中,我们将“A”元素放置,此操作如图(B)所示。请参阅图(3),假设堆栈包含三个元素A,B,C,堆栈填充元素。

如果要使用PUSH(S,D)插入第四个元素-i-'d',但没有可用于插入元素的空间,然后它表示堆栈是溢出的。当堆栈已满时使用溢出术语,并且按下推送操作算法如下所示。

推(堆栈[],顶部,max堆栈,项目)

if(top == maxstack-1)

{

打印“溢出”

}

别的

{

top = top + 1

堆栈[top] =项目

}

结尾

流行运营

POP意味着删除堆栈顶部的元素。在弹出操作的情况下,我们必须检查堆栈是否最初是空的。如果堆栈最初为空,则会出现下溢情况。假设堆栈是空的仍然希望弹出堆栈中的元素,但堆栈中没有元素,则它会导致堆栈下溢。

下面流程分别检查POP操作。在POP操作中,无论将弹出还是删除的堆栈中存在顶部元素,所以无需提及将弹出哪个元素,默认情况下将弹出最顶层元素。POP操作的算法如下所示。

POP(Stack [],Top,Item)

如果(top == - 1)

{

打印“下溢”

}

别的

{

项目=堆栈[top]

top = top-1

}

例子

元素以顺序插入A,B,C,D,E,它代表五个元素的堆叠。In figure (a), we want to push ‘A’ element on the stack then the top becomes zero (top=0), similarly the top=1 when ‘B’ element is pushed, top=2 when the ‘C’ element is pushed, top=3 when the ‘D’ element is pushed, and top=4 when the ‘E’ element is pushed.

所以无论我所拍摄的元素如何放在堆栈中,现在堆栈已满。如果要推送另一个元素,则堆栈中没有位置,因此它表示溢出。现在,如果要弹出元素,则堆栈已满,必须先删除元素的E'元素。推送操作如下图所示。

推动操作
推动操作

我们必须使用POP操作删除堆栈中的元素。所以只是提到pop()不要在pop中编写参数,因为默认情况下它会删除顶部元素。第一个'e'元素是删除下一个'd'元素......'a'。当顶部元素删除时,顶部值会降低。当顶部= -1堆栈表示下溢。POP操作如下图所示。

流行运营
流行运营

因此,这是通过使用PUSH和POP操作在堆栈中插入和删除元素的说明。

应用程序

堆栈/堆栈指针的应用是

  • 字符串逆转
  • 平衡括号
  • 撤消/ dedo.
  • 激活记录系统堆栈
  • infix,prefix,postfix,表达式

常见问题解答

1)。手臂中的堆栈指针是什么?

堆叠指针寄存器(R13)用作ARM中的活动堆叠的指针。

2)。为什么堆栈指针是16位?

用于存储先前位置和存储器位置地址的堆栈指针(SP)和程序计数器(PC)是16位,因此堆栈指针(SP)也是16位。

3)。堆栈指针的角色是什么?

堆栈指针(SP)的角色是指示堆栈中的元素的顶部。

4)。哪个堆栈在8085中使用?

8085中使用的堆栈持续到首先(LIFO)。

5)。堆栈指针是寄存器吗?

是的,堆栈指针(SP)是一个地址寄存器,始终指示堆栈中的元素的顶部。

在本文中是什么堆栈/堆栈指针(SP),使用图中,寄存器堆栈和存储器堆栈和8085中的图表,堆栈和堆栈指针和应用程序的寄存器堆栈和存储器堆栈和应用程序。以下是堆栈/堆栈指针的使用是什么?

添加评论