Go 栈的实现

package main

import (
   "errors"
   "fmt"
)

type Stacker struct{
   Val interface{}
   Next *Stacker
}

func Push(head *Stacker,arrval []byte) ( *Stacker, ){
   //node := Stacker{nil,nil}
   p := head
   for {
      if p.Next==nil{
         break
      }
      p=p.Next
   }
   for i:=0;i<len(arrval) ;i++  {
      node :=Stacker{arrval[i],nil}
      p.Next = &node
      p =p.Next
   }
   return head
}

func Pop(head *Stacker)(Stacker,error){
   if head.Next==nil{
      //fmt.Println("stacker empty")
      return Stacker{},errors.New("stacker empty")
   }
   p :=head
   pop := Stacker{nil,nil}
   for{
      if p.Next.Next==nil{
         pop = *p.Next
         p.Next=nil
         return pop,nil
      }
      p=p.Next
   }
}

func StackerLength(head *Stacker)int{
   length :=0
   p := head
   for {
      p = p.Next
      if p==nil{
         return length
      }
      length++
   }
}

func StackerIsEmpty(head *Stacker)bool{
   if StackerLength(head)==0{
      return true
   }else{
      return false
   }
}

func GetTop(head *Stacker)(Stacker,error){
   if head.Next==nil{
      //fmt.Println("stacker empty")
      return Stacker{},errors.New("stacker empty")
   }
   p :=head
   for{
      if p.Next==nil{
         return *p,nil
      }
      p=p.Next
   }
}

func main(){
   stack := &Stacker{nil,nil}
   //tail  := &Stacker{nil,nil}
   arrval := []byte{'a','b','c','d','e'}
   stack = Push(stack,arrval)
   node,_ :=GetTop(stack)
   fmt.Printf("%v",node)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值