内容简介:两栈共享空间的结构的golang代码如下:
图片来源于《大话数据结构》
图片来源于《大话数据结构》
两栈共享空间的结构的golang代码如下:
package stack
import (
"fmt"
"errors"
)
//共享栈
const MaxDoubleSize = 20 //存储空间初始分配量
type DoubleStack struct {
data [MaxDoubleSize]SElemType
top1 int //栈1栈顶指针
top2 int //栈2栈顶指针
}
// 初始化一个空栈
func (d *DoubleStack) InitStack () {
d.top1 = -1
d.top2 = MaxDoubleSize
}
// 把d置为空栈
func (d *DoubleStack) ClearStack() {
d.top1 = -1
d.top2 = MaxDoubleSize
}
// 若栈l为空栈,则返回true 否则返回false
func (d *DoubleStack) IsEmpty() bool {
if d.top1 == -1 && d.top2 ==MaxDoubleSize {
return true
} else {
return false
}
}
// 返回s的元素个数,即栈的长度
func (d *DoubleStack) Length() int {
return (d.top1 + 1) + (MaxDoubleSize-1-d.top2)
}
// 插入元素e为新的栈顶元素,栈满返回error
func (d *DoubleStack) Push(e SElemType, stackNum int) error {
if d.top1 + 1 == d.top2 {
return errors.New("stack is full")
}
// 栈1有元素进栈
if stackNum == 1 {
d.top1++
d.data[d.top1] = e
} else if stackNum ==2 { // 栈2有元素进栈
d.top2--
d.data[d.top2] = e
}
return nil
}
// 若栈不空,则删除d的栈顶元素 用e返回其值,否则返回error
func (d *DoubleStack) Pop(stackNum int) (e SElemType,err error) {
if stackNum == 1 {
if d.top1 == -1 {
return 0, errors.New("stack is empty") //栈1为空,已溢出
}
e = d.data[d.top1]
d.top1--
} else if stackNum == 2 {
if d.top2 == MaxDoubleSize {
return 0, errors.New("stack is empty") //栈2为空,已溢出
}
e = d.data[d.top2]
d.top2++
}
return
}
//遍历栈
func (d *DoubleStack) Traverse() {
for i:=0; i <= d.top1 ; i++ {
fmt.Println(d.data[i])
}
for i:=d.top2; i < MaxDoubleSize ; i++ {
fmt.Println(d.data[i])
}
}
func TestDoubleStack() {
var s DoubleStack
s.InitStack()
for j:=1;j <= 5 ; j++ {
s.Push(SElemType(j),1)
}
for j:=MaxDoubleSize;j >= MaxDoubleSize-2 ; j-- {
s.Push(SElemType(j),1)
}
fmt.Println("栈中的元素为:")
s.Traverse()
e, _ := s.Pop(1)
fmt.Println("弹出的元素为:", e)
fmt.Println("栈是否为空:", s.IsEmpty())
fmt.Println("栈的长度:", s.Length())
s.ClearStack()
fmt.Println("栈是否为空:", s.IsEmpty())
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
付费:互联网知识经济的兴起
方军 / 机械工业出版社 / 2017-6-1 / CNY 59.00
关于互联网知识付费的首部作品 知识工作正在被重塑,知识经济正在开启互联网时代下半场 为你展现互联网知识经济全景大图,解读新物种的前世今生 内容简介 一个产业解读 三个分析工具 一组知识卡片 书是最早的知识载体,已有2000多年的付费历史,随着移动互联网的普及,新的知识经 济在今天爆发,知识的创造者和传播者从书后走到了书前,互联网知识经济正在拉开帷幕。知识的......一起来看看 《付费:互联网知识经济的兴起》 这本书的介绍吧!
Base64 编码/解码
Base64 编码/解码
XML、JSON 在线转换
在线XML、JSON转换工具