个人算法练习库-go语言版--1

wslzwps00321 · · 2212 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

package main import (	"fmt"	"util/stack" ) type tree struct {	data int	l *tree	r *tree } type list struct {	data int	next *list } //阶乘 func fact(n uint32) uint32 {	if n == 0 {	return 1	}	return n * fact(n-1) } //二分查找 func BSearch(a []int, element, low, height int) int {	if low > height {	return -1	}	mid := (low + height) / 2	if a[mid] == element {	return 0	} else if a[mid] > element {	return BSearch(a, element, low, mid-1)	} else {	return BSearch(a, element, mid+1, height)	} } //斐波那契数列--递归 func f(n int) int {	if n < 3 {	return 1	}	return f(n-1) + f(n-2) } //斐波那契数列--非递归 func f1(n int) int {	var s, s1, s2 int = 1, 1, 1	for i := 3; i <= n; i++ {	s = s1 + s2	s2 = s1	s1 = s	}	return s } //冒泡 func bubblesort(a []int, n int) {	//n个数据需要n-1趟	for i := 1; i < n; i++ {	//每趟需要比较 元素个数-1 次	for j := 0; j < n-i; j++ {	if a[j] > a[j+1] {	temp := a[j]	a[j] = a[j+1]	a[j+1] = temp	}	}	} } //反转链表 func reverseList(head *list) *list {	if head == nil {	return head	}	ph := reverseList(head.next)	head.next.next = head	head.next = nil	return ph } func reverseList1(head *list) *list {	if head == nil || head.next == nil {	return head	}	node1, node2, node3 := head, head.next, head.next.next	for node2 != nil {	node2.next = node1	node1.next = nil	node1 = node2	node2 = node3	node3 = node3.next	}	return node2 } //将二叉搜索树转换成双向链表 func treeToDoubleList(head, tail *tree, root *tree) {	var ltail, rhead *tree	if root == nil {	head = nil	tail = nil	return	}	treeToDoubleList(head, ltail, root.l)	treeToDoubleList(rhead, tail, root.r)	if ltail != nil {	ltail.r = root	root.l = ltail	} else {	head = root	}	if rhead != nil {	root.r = rhead	rhead.l = root	} else {	tail = root	} } //比较两个树是否相等 func compareTree(t1, t2 *tree) int {	if t1 == nil && t2 == nil {	return 1	}	if t1 == nil || t2 == nil {	return -1	}	if t1.data != t2.data {	return -1	}	if compareTree(t1.l, t2.l) == 1 && compareTree(t1.r, t2.r) == 1 {	return 1	} else {	return -1	} } //在二元树中找出和为某一值的所有路径 func getValuePath(root *tree, n int, sum int) {	if root == nil {	return	}	s.Push(root.data)	sum += root.data	if sum == n {	fmt.Println(s)	s.Pop()	return	}	getValuePath(root.l, n, sum)	getValuePath(root.r, n, sum)	s.Pop() } //获取最大子数组 func getMaxSubArray(a []int, n int) {	if n < 0 || a == nil {	return	}	var sum, begin, end, max int = 0, 0, 0, -1 << 31	for i := 0; i < n; i++ {	sum += a[i]	if sum < 0 {	sum = 0	begin = i + 1	}	if sum > max {	max = sum	end = i	}	}	fmt.Println(begin, end, max) } //判断整数序列是不是二元查找树的后序遍历结果 func checkPostOrder(a []int, l, h int, b *bool) {	if l >= h {	return	}	parent := a[h]	//fmt.Println(parent, l, h)	i := l	for ; i < h-1; i++ {	if a[i] > parent {	break	}	}	for j := i + 1; j < h; j++ {	if a[j] <= parent {	*b = false	break	}	}	if *b {	checkPostOrder(a, l, i-1, b)	checkPostOrder(a, i, h-1, b)	} } //^-反转句子里面单词的顺序 func swap(b []byte, begin, end int) {	if begin > end {	return	}	for begin <= end {	tmp := b[begin]	b[begin] = b[end]	b[end] = tmp	begin++	end--	} } func reverseStr(str *string) {	begin := 0	b := []byte(*str)	for i := 0; i < len(*str); i++ {	if b[i] == 32 {	swap(b, begin, i-1)	begin = i + 1	}	}	swap(b, begin, len(*str)-1)	//反转整个字符串	swap(b, 0, len(*str)-1)	fmt.Println(string(b)) } //$-反转句子里面单词的顺序 func main() {	/*	//var b uint32 = 6	//fmt.Println(b, "!=", fact(b))	//a := []int{1, 2, 4, 6, 7, 8, 9, 10, 11, 12}	//c := BSearch(a, 4, 0, 9)	//fmt.Println(c)	//t := []int{3, 2, 1, 5, 7, 6, 9, 0}	//bubblesort(t, 8)	//fmt.Println(t)	//t := []int{1, -2, 3, 10, -4, 7, 2, -5}	//getMaxSubArray(t1, len(t1))	t1 := tree{4, nil, nil}	t2 := tree{7, nil, nil}	t3 := tree{5, &t1, &t2}	t4 := tree{12, nil, nil}	root := tree{10, &t3, &t4}	getValuePath(&root, 22, 0)	t := []int{5, 7, 6, 9, 11, 20, 1, 8}	//t := []int{7, 4, 6, 5}	b := true	checkPostOrder(t, 0, 7, &b)	fmt.Println(b)	*/	str := "i am a student."	reverseStr(&str) } 



有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:wslzwps00321

查看原文:个人算法练习库-go语言版--1

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2212 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传