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

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

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

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

查看所有标签

猜你喜欢:

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

软件架构设计

软件架构设计

温昱 / 电子工业出版社 / 2012-7 / 39.00元

《软件架构设计:程序员向架构师转型必备(第2版)》围绕“软件架构设计”主题,从“程序员”成长的视角,深入浅出地讲述了架构师的修炼之道。从“基础篇”、到“设计过程篇”、到“模块划分专题”,《软件架构设计:程序员向架构师转型必备(第2版)》覆盖了架构设计的关键技能项,并且对于架构设计过程中可能出现的各种问题给与了解答。一起来看看 《软件架构设计》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

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

在线 XML 格式化压缩工具

html转js在线工具
html转js在线工具

html转js在线工具