栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

golang 怎么设计一个栈

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

golang 怎么设计一个栈

栈是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶。

栈有时又叫LIFO(先进后出)表。 (推荐学习:go)

对栈的操作有Push(进栈)和Pop(出栈),前者相当于插入,后者相当于删除最后插入的元素。

以下用双向链表和切片实现分别实现栈操作

//stack//用双向链表实现stacktype Element interface {}var header *entry  //链表表头var size int  //栈的长度type entry struct {    previous *entry    next     *entry    element  Element}func newEntry(prev,next *entry,e Element) *entry {    return  &entry{prev,next,e}}//初始化header  表头func NewStack() *entry {    header = newEntry(nil,nil,nil)    header.previous =header    header.next = header    return header}type Stack interface {    Push(e Element)    //向栈顶添加元素    Pop()   Element    //移除栈顶元素    Top()   Element   //获取栈顶元素(不删除)    Clear()  bool       //清空栈    Size()  int            //获取栈的元素个数    IsEmpty() bool   //判断栈是否是空栈}//向栈顶添加元素func (e *entry) Push(element Element)  {    addBefore(header,element)}//移除栈顶元素func (e *entry) Pop() Element {    if e.IsEmpty() {        fmt.Println("stack is empty!")        return nil    }    prevEntry := header.previous    prevEntry.previous.next = header    header.previous = prevEntry.previous    size--    return prevEntry.element}//获取栈顶元素(不删除)func (e *entry) Top() Element {    if e.IsEmpty() {        fmt.Println("stack is empty!")        return nil    }    return header.previous.element}//清空栈func (e *entry) Clear() bool {    if e.IsEmpty() {        fmt.Println("stack is empty!")        return false    }    entry := header.next    for entry != header {        nextEntry := entry.next        entry.next = nil        entry.previous = nil        entry.element = nil        entry = nextEntry    }    header.next = header    header.previous = header    size =0    return true}func (e *entry) Size() int  {    return size}func (e *entry) IsEmpty() bool {    if size == 0 {        return true    }    return false}//在entry节点之前添加func addBefore(e *entry,element Element) Element{    newEntry := newEntry(e.previous,e,element)    newEntry.previous.next = newEntry    newEntry.next.previous = newEntry    size++    return newEntry}//用切片实现Stacktype  sliceEntry struct{    element []Element}func NewSliceEntry() *sliceEntry {    return &sliceEntry{}}func (entry *sliceEntry)Push(e Element) {    entry.element = append(entry.element,e)}func  (entry *sliceEntry)Pop() Element {    size := entry.Size()    if size == 0 {        fmt.Println("stack is empty!")        return nil    }    lastElement := entry.element[size-1]    entry.element[size-1] = nil    entry.element  = entry.element[:size-1]    return lastElement}func  (entry *sliceEntry)Top() Element {    size := entry.Size()    if size == 0 {        fmt.Println("stack is empty!")        return nil    }    return entry.element[size-1]}func  (entry *sliceEntry)Clear() bool {    if entry.IsEmpty() {        fmt.Println("stack is empty!")        return false    }    for i :=0;i

以上就是golang 怎么设计一个栈的详细内容,更多请关注考高分网其它相关文章!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/794109.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号