golang实现常用数据结构

1.数组栈的实现

package main

import (
"fmt"
)

type ItemType int

type Stack struct {
node    [10]ItemType
maxsize int
top     int
}

func StackInit(p *Stack) {
p.top = -1
}

func StackCheckFull(p *Stack) bool {
if p.top >= p.maxsize {
return true
} else {
return false
}
}

func StackCheckEmpty(p *Stack) bool {
if p.top <= -1 {
return true
} else {
return false
}
}

func StackPush(p *Stack, v ItemType) {
p.top++
p.node[p.top] = v
return
}

func StackPop(p *Stack) (v ItemType) {
v = p.node[p.top]
p.top--
return v
}

func main() {
var stack Stack
StackPush(&stack, 100)
StackPush(&stack, 88)
StackPush(&stack, 44)
value := StackPop(&stack)
fmt.Println(value)
}

2.链表的实现

package main

import (
"fmt"
)

type item int

type list struct {
data item
next *list
}

var phead, ptail *list
var listCount int

func main() {
listInit()
listAdd(100)
listAdd(99)
listAdd(77)
listTraverse()
}

func listInit() {
head := new(list)
phead = head
ptail = head
listCount = 0
}

func listAdd(data item) {
var q *list = new(list)
q.next = nil
q.data = data
ptail.next = q
ptail = q
listCount++
}

func listInsert(data item, pos int) int {
if pos >= listCount {
return -1
}
var ptmp *list = phead
for i := 0; i < pos; i++ {
ptmp = ptmp.next
}
q := new(list)
q.data = data
q.next = ptmp.next
ptmp.next = q
listCount++
return 0
}

func listDelete(pos int) int {
if pos > listCount {
return -1
}
var ptmp *list = phead
for i := 0; i < pos-1; i++ {
ptmp = ptmp.next
}
ptmp.next = ptmp.next.next
return 0
}

func listTraverse() {
var ptmp *list = phead
for ptmp.next != nil {
ptmp = ptmp.next
fmt.Printf("%d->", ptmp.data)
}
}



转载于:https://my.oschina.net/u/1383471/blog/624744

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值