文档章节

算法入门之路之go语言3

z
 zerozz
发布于 2016/01/27 10:26
字数 530
阅读 9
收藏 0
// hash project main.go
package main

import (
	"fmt"
)

// 主函数
func main() {

	fmt.Println("欢迎 来到 Go 语言社区,www.golangweb.com")

	testhash := create_hash_table()

	bret := insert_data_into_hash(testhash, 5)
	bret := insert_data_into_hash(testhash, 6)
	insert_data_into_hash(testhash, 8)
	//insert_data_into_hash(testhash, 1)
	//insert_data_into_hash(testhash, 2)
	insert_data_into_hash(testhash, 3)
	insert_data_into_hash(testhash, 4)
	insert_data_into_hash(testhash, 7)
	insert_data_into_hash(testhash, 9)
	insert_data_into_hash(testhash, 0)
	insert_data_into_hash(testhash, 111)
	insert_data_into_hash(testhash, 12)
	if false == bret {
		fmt.Println("插入失败!!!")
	}
	//delete_data_from_hash(testhash, 11)
	fmt.Println("开始")
	tetsnode := find_data_in_hash(testhash, 111)
	fmt.Println(tetsnode)
	fmt.Println("测试")

	return
}

//hash表,有时候也被称为散列表。个人认为,hash表是介于链表和二叉树之间的一种中间结构。链表使用十分方便,
//但是数据查找十分麻烦;二叉树中的数据严格有序,但是这是以多一个指针作为代价的结果。hash表既满足了数据的查找方便,
//同时不占用太多的内容空间,使用也十分方便。

// a)定义hash表和基本数据节点
type _NODE struct {
	data int
	next *_NODE
}

type _HASH_TABLE struct {
	value [10]*_NODE
}

//  b)创建hash表
func create_hash_table() *_HASH_TABLE {
	// 初始化数据,也就是数据的创建的操作
	pHashTbl := new(_HASH_TABLE)
	return pHashTbl
}

//   c)在hash表当中寻找数据
func find_data_in_hash(pHashTbl *_HASH_TABLE, data int) *_NODE {

	var pNode *_NODE
	// 判断数据为空不
	if nil == pHashTbl {
		return nil
	}
	pNode = pHashTbl.value[data%10]
	fmt.Println("结束", pNode)
	// 数组的数据的判断
	if nil == pNode {
		return nil
	}
	// 循环取数据
	for {
		if nil == pNode {
			break
		}

		if data == pNode.data {
			return pNode
		}
		pNode = pNode.next
	}

	return nil
}

// d)在hash表当中插入数据
func insert_data_into_hash(pHashTbl *_HASH_TABLE, data int) bool {
	var pNode *_NODE
	// 判断数据为空不
	if nil == pHashTbl {
		return false
	}
	fmt.Println(data % 10)
	// 数据转换逻辑
	if nil == pHashTbl.value[data%10] {

		pNode = new(_NODE)
		pNode.data = data
		pHashTbl.value[data%10] = pNode
		fmt.Println("pNode:", pNode)
		return true
	}
	if nil == find_data_in_hash(pHashTbl, data) {
		fmt.Println("错误")
		return false
	}
	pNode = pHashTbl.value[data%10]
	for {
		if nil == pNode.next {
			break
		}
		pNode = pNode.next
	}
	pNode.next = new(_NODE)
	pNode.next.data = data
	return true
}

//     e)从hash表中删除数据

func delete_data_from_hash(pHashTbl *_HASH_TABLE, data int) bool {
	var pHead *_NODE
	var pNode *_NODE

	if nil == pHashTbl || nil == pHashTbl.value[data%10] {
		return false
	}
	pNode = find_data_in_hash(pHashTbl, data)
	if nil == pNode {
		return false
	}
	if pNode == pHashTbl.value[data%10] {
		pHashTbl.value[data%10] = pNode.next
		goto final
	}
	pHead = pHashTbl.value[data%10]
	for {
		if nil == pHead.next {
			break
		}

		pHead = pHead.next
		pHead.next = pNode.next
	}
final:
	// 清除指针数据
	pNode = nil
	return true
}

//总结:
//    1、hash表不复杂,我们在开发中也经常使用,建议朋友们好好掌握;


© 著作权归作者所有

共有 人打赏支持
z
粉丝 1
博文 10
码字总数 1576
作品 0
东城
私信 提问
12月初值得一读的10本技术新书(分布式架构、自然语言、程序员成长等)!文末有福利!

12月1日,阿里云云栖社区机构号 联合IT图书专业出版社 博文视点 为大家带来十本技术新书(分布式架构、自然语言、程序员成长等)。以下为书籍详情,文末还有福利哦! 书籍名称:《OpenCV算法...

阿里云云栖社区
2017/12/01
0
0
最适合入门的编程语言——python

本文旨在指出python是最适合用于编程入门的编程语言,并非强调某种语言是世界上最好的语言。在掌握一门编程语言之后,你完全可以学习其它编程语言,使用哪种语言往往取决于你以后的工作,而同...

cclplus
11/13
0
0
Allen Kashiwa的游戏开发信息

1 基础知识与通用技能 1.1 语言相关 1.1.1 C/C++ C++ Primer 1.1.2 C# C# 编程指南 1.1.3 Lua Programming in Lua 1.1.4 Python 廖雪峰的Python教程 1.2 语言无关 算法图解 Game Programming...

kashiwa
2017/08/01
0
0
从0到1的逆袭之路,Python改变你的学习方式

  随着机器学习的兴起,Python 逐步成为了「最受欢迎」的语言。它简单易用、逻辑明确并拥有海量的扩展包,因此其不仅成为机器学习与数据科学的首选语言,同时在网页、数据爬取可科学研究等...

北北北乐
08/22
0
0
收藏|学习Python编程的6本书籍

本文与大家分享一些Python编程语言的入门书籍,其中不乏经典。有关书籍的介绍,大部分截取自官方介绍。 Python基础教程(Begining Python) 《Python基础教程(第2版·修订版)》是经典的Pyt...

诸葛玥
2017/12/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring源码学习笔记-1-Resource

打算补下基础,学习下Spring源码,参考书籍是《Spring源码深度解析》,使用版本是Spring 3.2.x,本来想试图用脑图记录的,发现代码部分不好贴,还是作罢,这里只大略记录下想法,不写太细了 ...

zypy333
今天
10
0
RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
今天
17
0

中国龙-扬科
昨天
2
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
10
0
java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部