剑指offer-之-数据结构1
2019-06-14 21:22
816 查看
常考数据结构:数组,字符串,链表,树,栈,队列
数组和字符串是最常用的数据结构:用连续内存存储数字和字符。
链表和树也是很常用的数据结构,由于操作链表和树需要大量的指针,注意程序的鲁棒性。
栈是一个与递归相关的数据结构,同样队列也会广度优先算法相关。深刻理解这两种数据结构。
1.数组
内存连续,为所有数组预先分配内存。
为了解决数组的空间效率不高问题,又出现了多种动态数组。
[code]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() } }
相关文章推荐
- 剑指offer 2.3 数据结构2-二维数组中的查找
- 剑指offer 2.3 数据结构3-字符串
- #数据结构与算法学习笔记#剑指Offer1:二维数组中的查找(JAVA)
- 【剑指offer】数据结构 ——包含min函数的栈(C++)
- 剑指offer 2.3 数据结构4-替换字符串中的空格
- 剑指offer--数据结构之二叉树(1、4、6、11、12、27、48、50、60)
- 【剑指offer】数据结构 —— 二叉树的下一个结点(C++)
- 剑指offer-数据结构:字符串(基础知识)
- 剑指offer 2.3 数据结构1-数组求sizeof()
- 【剑指offer】数据结构 ——从上往下打印二叉树
- 剑指offer--数据结构之链表(9、19、35)
- #数据结构与算法学习笔记#剑指Offer1.5:二维数组中的查找(C++)
- 【剑指offer】数据结构 ——栈的压入、弹出序列(C++)
- 剑指offer(二.1)数据结构篇之数组
- 剑指offer--树的子结构(牛客网)
- 剑指Offer8 旋转数据的最小数字
- 剑指offer(算法和数据操作篇)
- 剑指offer 14 - 调整数据顺序使奇数位于偶数前面
- 【剑指Offer】面试题18:树的子结构
- 剑指Offer:调整数组中的数据