文档章节

算法入门之路之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
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
Fanta/free-programming-books-zh_CN

免费的编程中文书籍索引 免费的编程中文书籍索引,欢迎投稿。 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。 stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版...

Fanta
2016/11/14
0
0
前端开发-从入门到Offer

解决你的前端面试 有时候前端的技术性面试还是很麻烦的,毕竟知识点那么多,框架迭代那么快。你不仅仅要对计算机科学基础有一个坚实的底子,还需要理解啥 Web 性能、构建系统以及 CSS 引擎等...

掘金官方
2017/12/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Mac OS X下Maven的安装与配置

Mac OS X 安装Maven: 下载 Maven, 并解压到某个目录。例如/Users/robbie/apache-maven-3.3.3 打开Terminal,输入以下命令,设置Maven classpath $ vi ~/.bash_profile 添加下列两行代码,之后...

TonyStarkSir
28分钟前
0
0
关于编程,你的练习是不是有效的?

最近由于工作及Solution项目的影响,我在重新学习DDD和领域建模的一些知识。然后,我突然就想到了这个问题,以及我是怎么做的? 对于我来说,提升技能的项目会有四种: 纯兴趣驱动的项目。即...

问题终结者
48分钟前
1
0
打开eclipse出现an error has occurred see the log file

解决方法: 1,打开eclipse安装目录下的eclipse.ini文件; 2,打开的文本文件最后添加一行 --add-modules=ALL-SYSTEM 3,保存重新打开Eclipse。...

任梁荣
昨天
4
0
搞定Northwind示例数据库,无论哪个版本的SQLServer都受用

Northwind数据库 从这里可以找到突破口: http://social.msdn.microsoft.com/Forums/zh-CN/Vsexpressvb/thread/8490a1c6-9018-40c9-aafb-df9f79d29cde 下面是MSDN: http://msdn2.microsoft......

QQZZFT
昨天
1
0
mysql主从同步,安装配置操作

准备 两台mysql服务,我这里准备了如下: 主库:192.168.176.128 从库:192.168.176.131 如何在Linux上安装mysql服务,请看https://blog.csdn.net/qq_18860653/article/details/80250499 操作...

小致dad
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部