Go语言(container介绍)

今天,Mayuyu来介绍Go语言中一个重要的东西,叫做container。具体源码可以参考Go语言的源代码,如下

  路径:/usr/local/go/src/pkg/container

Github上的路径为:https://github.com/astaxie/gopkg/tree/master/container

container的结构如下

可以看出包含三部分:heap,list和ring。下面分别介绍

1. heap

heap即为堆,是一种常用的数据结构,在源码里面,提供了接口,在实际使用时需要实现。

下面是一个关于heap使用的实例。

 代码:

package main

import (
	"fmt"
	"container/heap"
)

//heap提供了接口,需要自己实现如下方法
type Heap []int

//构造的是小顶堆,大顶堆只需要改一下下面的符号
func (h *Heap) Less(i, j int) bool {
	return (*h)[i] < (*h)[j]
}

func (h *Heap) Swap(i, j int) {
	(*h)[i], (*h)[j] = (*h)[j], (*h)[i]
}

func (h *Heap) Len() int {
	return len(*h)
}

func (h *Heap) Pop() interface{} {
	x := (*h)[h.Len() - 1]
	*h = (*h)[: h.Len() - 1]
	return x
}

func (h *Heap) Push(x interface{}) {
	*h = append(*h, x.(int))
}

func (h *Heap) Remove(idx int) interface{} {
	h.Swap(idx, h.Len() - 1)
	return h.Pop()
}

func main(){

	//创建一个heap
	h := &Heap{}

    heap.Init(h)
	//向heap中插入元素
	h.Push(5)
	h.Push(2)
	h.Push(1)
	h.Push(8)
	h.Push(4)
	h.Push(6)
	h.Push(2)

	//输出heap中的元素,相当于一个数组,原始数组
	fmt.Println(h)

	//这里必须要reheapify,建立好堆了
	heap.Init(h)

	//小顶堆对应的元素在数组中的位置
	fmt.Println(h)

	//移除下标为5的元素,下标从0开始
	h.Remove(5)

	//按照堆的形式输出
	for h.Len() > 0 {
		fmt.Printf("%d ", heap.Pop(h))
	}
	fmt.Println()
}

2. list

list类型是双向链表,具体用法如下

  代码:

package main

import (
	"fmt"
	"container/list"
)

func main(){

	//创建一个双向链表
	ls := list.New()

	//向双向链表中插入26个小写字母
	for i := 97; i < 123; i++ {
		ls.PushFront(i)     //PushFront()代表从头部插入,同样PushBack()代表从尾部插入
	}

	//遍历双向链表ls中的所有字母
	for it := ls.Front(); it != nil; it = it.Next() {
		fmt.Printf("%c ", it.Value)
	}
	fmt.Println()
}

3. ring

ring是一个环形链表,具体用法可以参考如下代码

   代码:

package main

import (
	"fmt"
	"container/ring"	//闭环包引入,详见/usr/local/go/src/pkg/container/ring
)

func main(){
	//创建10个元素的闭环
	r := ring.New(10)

	//给闭环中的元素赋值
	for i := 1; i <= r.Len(); i++ {
		r.Value = i
		r = r.Next()
	}

    //循环打印闭环中的元素值
	r.Do(
		func(p interface{}){
			println(p)
	    })

	//获得当前元素之后的第5个元素
	r5 := r.Move(5)
	fmt.Println(r5)
	fmt.Println(r)

	//链接当前元素r与r5,相当于删除了r与r5之间的元素
	r1 := r.Link(r5)
	fmt.Println(r1)
	fmt.Println(r)
}
时间: 2024-10-21 13:35:01

Go语言(container介绍)的相关文章

Linux平台上SQLite数据库教程(二)——C语言API介绍

Linux平台上SQLite数据库教程(二)--C语言API介绍 前言:本文将介绍几个基本的SQLite3数据库的C语言API接口,主要用到两个文件:sqlite3.c.sqlite3.h.源码地址:https://github.com/AnSwErYWJ/SQLite. 打开数据库 1.原型: int sqlite3_open( const char* filename, /* 数据库文件名, 必须为 UTF-8 格式 */ sqlite3** ppDB /* 输出: SQLite 数据库句柄

Cocos2d-x 脚本语言Lua介绍

Cocos2d-x 脚本语言Lua介绍 本篇博客记录Lua学习.学习来自eoe论坛,Lua语言开发Cocos2d-x游戏入门视频教程,猛戳下面地址: http://www.eoeandroid.com/thread-320602-1-1.html 由于Lua语言小巧.简单.能与C/C++无缝结合.运行高速.易于更新等长处,越来越多的公司在使用Lua语言进行游戏开发,而非常多Cocos2d-xproject师的招聘要求上直接写明要求会Lua语言.我了解到一家公司在开发Cocos2d-x游戏时游戏逻

Scheme语言--简单介绍

一年前事实上有时间看完SICP这本书,后来由于种种原因,一直没有继续再学.由于SICP中使用Scheme确实应用不多.在Java,C++的语言眼里,Scheme确实非常另类.现在MIT已经放弃了使用Scheme作为SICP的教学语言而转向python之际,我在此開始学习这本书与这门语言的学习.SICP主要使用Scheme语言来解决计算机科学中的一些问题.为了督促自己,每天都能学习.积小流而成江海,把自己的学习过程放在这里,以供自己复习. 本系列主要包含两部分Scheme语言层面的问题及SICP中

Velocity语言的介绍

2016-09-06 15:39:25 语言介绍 Velocity是一种Java模版引擎技术,是一个基于Java的模板引擎(template engine).她允许任何人简简单单的使用模板语言类引用由Java代码定义的对象. 当Velocity应用于web开发时,界面设计人员可以和Java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序员关注业务逻辑编码.Velocity将Java代码从web页面中分离出来,这样web站点的长期

logo语言编程介绍

绘图是LOGO语言中最主要的功能,佩伯特博士就是希望能通过绘图的方式来培养学生学习电脑的兴趣和正确的学习观念.LOGO语言从开始发展到现在,已有Windows版本--MSWLogo,包括Windows 3.X版及Windows9X版等.在以前的LOGO语言中有一个海龟,它有位置与指向两个重要参数,海龟按程序中的LOGO指令或用户的操作命令在屏幕上执行一定的动作,现在,图中的海龟由小三角形所替代.上世纪90年代,台湾推出繁体版的LOGO语言,称之为:[葛拉堡/Gerlabau],其后国内也推出了中

Lua语言的介绍和编程语言的归类

Lua 本条目介绍的是一种编程语言.关于关于Lua在维基百科中的使用,请见"维基百科:Lua".关于"Lua"一词的其他意思,请见"卢阿". Lua 编程范型 多重编程范式,脚本,命令式编程(过程式,基于原型的编程,面向对象程序),函数编程语言 设计者 Roberto Ierusalimschy Waldemar Celes Luiz Henrique de Figueiredo 发行时间 1993年 最新发行时间 5.3.4(2017年1月30

数据结构C语言实现介绍

刚刚结束的大二上学期学习了数据机构C语言版这门课,在接下来的一个月中准备把课程的代码和知识点总结一下,就有了这个专题:数据结构C语言实现,在这里我将用C语言实现最基本的数据结构以及一些基本的算法,以下是我这个专题的内容: 1. 数据结构及算法简介: 主要介绍数据结构及算法的基础知识,一些基本的概念和术语,以及算法的定义.算法的特性.算法的时间复杂度和空间复杂度 2.顺序表的定义及算法实现: 主要介绍顺序表的定义及特点,实现顺序表的存储结构以及基本操作 3.单链表的定义及算法实现:  主要介绍单链

go语言基本介绍

Golang发展历史 1. 诞生历史a. 诞生与2006年1月2号下午15点4分5秒b. 2009发布并正式开源c. 2012年第一个正式版本Go 1.0发布d. 截至到2017年8月24号Go 1.9版本正式 GO环境搭建 1. Go安装 a. 打开Golang官网, https://golang.org/dl/b. 选择window安装包进行下载c. 双击安装 https://github.com/pingguoxueyuan/gostudy/tree/master/listen1 2. G

1 C语言 gcc 介绍 C 语言编译 main接受参数

1         第一个c语言的hello world 1.1      include头文件包含 头文件包含,写法#include<文件名>, 1.2      main函数 这个就是C语言程序的入口,所有的C程序都是从main开始执行,一个C的源程序必须有一个main函数,也只能有一个main函数 1.3      注释 //注释一行 /* */代表块注释,可以注释多行代码 1.4      {}括号和代码块 代表一个代码单元 1.5      声明 C语言规定,所有的变量和函数必须先声