数据结构题目32:顺序堆栈操作
2020-05-06 本文已影响0人
玲儿珑
- 初始化一个堆栈
var M = 20
function initials() {
var stackObj = {
stack : new Array(M),
top : -1
}
return stackObj
}
- 测试堆栈是否为空
function emptys(top) {
return top == -1
}
- 测试堆栈是否已满
function fulls(top) {
return top == M-1
}
- 取当前栈顶元素
将当前栈顶元素取出赋值变量返回。此操作不改变栈顶指针的位置。
function getTops(stackObj) {
if (emptys(stackObj.top)) {
return 0
} else {
return stackObj.stack[stackObj.top]
}
}
- 插入(进栈)
此算法在容量为M的堆栈中插入一个新的元素item,栈顶元素的位置由top指出。
function push(stackObj, item) {
if (fulls(stackObj.top)) {
return 0
} else {
stackObj.stack[++stackObj.top] = item
return stackObj
// return 1
}
}
- 删除(退栈)
此算法从堆栈中退出当前栈顶元素,并保存在变量item中返回,同时修改栈顶指针的位置。
有必要说明一下,所谓删除,只是将栈顶指针“下退”一个位置,原来的栈顶元素就被认为不包括在堆栈中了(实际山该元素还占据原来的位置,当有新的数据元素进栈时就会将其“冲掉”)。
function pop(stackObj) {
if (emptys(stackObj.top)) {
return 0
} else {
let item = stackObj.stack[stackObj.top--]
return item
// return 1
}
}
测试:
//初始化堆栈
var stackObj = initials()
console.log(stackObj)
//填充堆栈
push(stackObj, 1)
push(stackObj, 2)
push(stackObj, 3)
push(stackObj, 4)
push(stackObj, 5)
//删除堆栈
pop(stackObj)
//取出栈顶元素
getTops(stackObj)