文档章节

算法入门之路之go语言3

z
 zerozz
发布于 2016/01/27 10:26
字数 530
阅读 9
收藏 0
点赞 1
评论 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

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

Fanta/free-programming-books-zh_CN

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

Fanta ⋅ 2016/11/14 ⋅ 0

前端开发-从入门到Offer

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

掘金官方 ⋅ 2017/12/28 ⋅ 0

由“吸血鬼数字”引发的关于算法的思考

今天看Thing in java的第四章有个小练习是找出4位数的所有吸血鬼数字( 一个4位数字,可以拆分2个2位数数字的乘积,顺序不限。)自己写了个递归的实现,虽然是正确的,但感觉不满意,效率太低...

joying华 ⋅ 2014/05/07 ⋅ 2

开源电子书

目录 语言无关类 操作系统 智能系统 分布式系统 编译原理 函数式概念 计算机图形学 WEB服务器 版本控制 编辑器 NoSQL PostgreSQL MySQL 管理和监控 项目相关 设计模式 Web 大数据 编程艺术 ...

zting科技 ⋅ 2017/12/11 ⋅ 0

AI 学习之路——轻松初探 Python 篇(一)

这是「AI 学习之路」的第 1 篇,「Python 学习」的第 1 篇 前言 1. Python 篇的组织结构 不管是学习人工智能还是大数据,Python 都是基本必学的,而且如果大家自己有一定的语言基础,会发现 ...

小之丶 ⋅ 2017/11/14 ⋅ 0

AI 学习之路——轻松初探 Python 篇(一)

喜欢小之的文章的可以关注公众号「WeaponZhi」持续关注动态 这是「AI 学习之路」的第 1 篇,「Python 学习」的第 1 篇 前言 1. Python 篇的组织结构 不管是学习人工智能还是大数据,Python ...

WeaponZhi ⋅ 2017/11/14 ⋅ 0

业余爱好者的C程序设计学习之路

我学习和工作的方向都是化工,和 IT 专业一点边都不搭,属于程序设计爱好者一类。坚持了很多年了,谈谈我的认识。 一、为什么是C 汇编太难,直接下手会吓死宝宝的。 basic 不能考虑,因为“对...

四彩 ⋅ 2016/02/04 ⋅ 2

自学MVC看这里——全网最全ASP.NET MVC 教程汇总

MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC。小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口。本文从Why,W...

葡萄城控件技术团队 ⋅ 2016/08/18 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

windows profesional 2017 build problem

.net framework .... https://stackoverflow.com/questions/43330915/could-not-load-file-or-assembly-microsoft-build-frameworkvs-2017...

机油战士 ⋅ 27分钟前 ⋅ 0

python3中报错的解决方法(长期更新)

1、ImportError: No module named ‘DjangoUeditor’ 出错原因:安装DjangoUeditor库适用于python2,需要下载适用python3的 下载地址:https://github.com/twz915/DjangoUeditor3 2、python3......

xiaoge2016 ⋅ 32分钟前 ⋅ 0

数据结构与算法之双向链表

一、双向链表 1.双向链表的结点结构 typedef struct DualNode{ ElemType data; struct DualNode *prior; // 前驱结点 struct DualNode *next; // 后继结点}DualNode, *DuL...

aibinxiao ⋅ 51分钟前 ⋅ 0

五大最核心的大数据技术

大数据技术有5个核心部分,数据采集、数据存储、数据清洗、数据挖掘、数据可视化。关于这5个部分,有哪些核心技术?这些技术有哪些潜在价值?看完今天的文章就知道了。 大数据学习群:7165810...

董黎明 ⋅ 53分钟前 ⋅ 0

PhpStorm 头部注释、类注释和函数注释的设置

首先,PhpStorm中文件、类、函数等注释的设置在:setting-》Editor-》FIle and Code Template-》Includes下设置即可,其中方法的默认是这样的: /**${PARAM_DOC}#if (${TYPE_HINT} != "v...

nsns ⋅ 53分钟前 ⋅ 0

spring.net AOP

http://www.springframework.net/doc-latest/reference/html/aop-quickstart.html https://www.cnblogs.com/wujy/archive/2013/04/06/3003120.html...

whoisliang ⋅ 57分钟前 ⋅ 0

【HAVENT原创】创建 Dockerfile 生成新的镜像,并发布到 DockerHub

注意:Win7 与 Win10 的版本存在差异,Win7 版本使用 Docker Quickstart Terminal 进入控制台,Win10下面直接用管理员权限打开控制台或者 PowerShell 即可;另外 Win7 下面只能访问 C盘,/ap...

HAVENT ⋅ 58分钟前 ⋅ 0

pom.xml出现web.xml is missing ...解决方案

提示信息应该能看懂。也就是缺少了web.xml文件,<failOnMissingWebXml>被设置成true了。 搜索了一下,Stack Overflow上的答案解决了问题,分享一下。 目前被顶次数最多的回答原文如下: This...

源哥L ⋅ 59分钟前 ⋅ 0

js时间戳与日期格式之间相互转换

1. 将时间戳转换成日期格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // 简单的一句代码 var date = new Date(时间戳); //获取一个时间对象 /** 1. 下面是获取时间日期的方法,需要什么样的格式自己...

Jack088 ⋅ 今天 ⋅ 0

web添加log4j

添加xml配置log4j.properties # Global logging configuration---root日志设置#log4j.rootLogger=info,dailyRollingFile,stdoutlog4j.rootLogger=debug,stdout,dailyRollingFile---......

黄柳淞 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部