多くの場合、テスト・データ構造:配列、文字列、リンクリスト、木、スタック、キュー
連続格納メモリ番号と文字:配列や文字列は、最も一般的なデータ構造です。
操作はポインタの多くは、注目のプログラムの堅牢性を必要とするのでリストと木は非常に一般的なデータ構造、リストやツリーです。
再帰スタック、キューに関連する同一の幅優先アルゴリズムに関連付けられたデータ構造です。データ構造の深い理解の両方。
1.アレイ
すべての事前に割り当てられたメモリアレイの連続したメモリ、。
スペースの問題を解決するために、高い配列の効率、及びダイナミックアレイの種々の出現はありません。
package main
import (
"fmt"
"github.com/pkg/errors"
)
//链表
type link struct {
id int32
next *link
}
func(head *link)addToTail(val int32) error{
pNew := link{id:val}
if head == nil {
return errors.New("operate nil link")
}
for {
if head.next != nil{
head = head.next
}else {
head.next = &pNew
break
}
}
return nil
}
func main1(){
node0 := link{id:0}
node1 := link{id:1}
node2 := link{id:2}
node3 := link{id:3}
node0.next = &node1
node1.next = &node2
node2.next = &node3
node0.addToTail(4)
fmt.Println(node3.next)
}
//栈
type stack struct {
array []int
indexNow int
}
//push
func(s *stack) pushStack(val int) int{
index := s.indexNow
index++
s.array[index] = val
return index
}
func(s *stack) pop() int{
index := s.indexNow
val := s.array[index]
index--
return val
}
//tree 未测试呢
type treeNode struct {
id int64
left *treeNode
right *treeNode
}
func(rootNode *treeNode)traverse(){
//理想情况
fmt.Println(rootNode.id)
if rootNode.left !=nil && rootNode.right != nil {
fmt.Println(rootNode.id)
rootNode.right.traverse()
rootNode.left.traverse()
}
}