思路概述
把内存看作长度为 n 的数组,堆指针 hp 表示下一个要写入的堆位置(从 0 向右生长),栈指针 sp 表示下一个要写入的栈位置(从 n-1 向左生长):
- 初始:
hp = 0,sp = n-1,内存为给定初值。
- 入堆(opt=0,给定 x):若
hp > sp ⇒ 无可用空间,Memory allocation failure;否则写 a[hp]=x,hp++。
- 出堆(opt=1):若
hp == 0 ⇒ 堆空,Invalid heap address;否则 hp--(不清空内存)。
- 入栈(opt=2,给定 x):若
hp > sp ⇒ 无可用空间,Memory allocation failure;否则写 a[sp]=x,sp--。
- 出栈(opt=3):若
sp == n-1 ⇒ 栈空,Invalid stack address;否则 sp++(不清空内存)。