データ構造 - 安全性を証明するオファー

多くの場合、テスト・データ構造:配列、文字列、リンクリスト、木、スタック、キュー

連続格納メモリ番号と文字:配列や文字列は、最も一般的なデータ構造です。

操作はポインタの多くは、注目のプログラムの堅牢性を必要とするのでリストと木は非常に一般的なデータ構造、リストやツリーです。

再帰スタック、キューに関連する同一の幅優先アルゴリズムに関連付けられたデータ構造です。データ構造の深い理解の両方。

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()
	}
}


 

おすすめ

転載: blog.csdn.net/u013755520/article/details/92003852