Golang 数据结构之【4.5共享栈】

栏目: Go · 发布时间: 4年前

内容简介:两栈共享空间的结构的golang代码如下:
Golang 数据结构之【4.5共享栈】

图片来源于《大话数据结构》

Golang 数据结构之【4.5共享栈】

图片来源于《大话数据结构》

两栈共享空间的结构的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())
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序员代码面试指南:IT名企算法与数据结构题目最优解

程序员代码面试指南:IT名企算法与数据结构题目最优解

左程云 / 电子工业出版社 / 2015-9 / 79.00元

这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近200道真实出现过的经典代码面试题,帮助广大程序员的面试准备做到万无一失。“刷”完本书后,你就是“题王”!__eol__本书采用题目+解答的方式组织内容,并把面试题类型相近或者解法相近的题目尽量放在一起,读者在学习本书时很容易看出面试题解法之间的联......一起来看看 《程序员代码面试指南:IT名企算法与数据结构题目最优解》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试