线性表之单链表

package main

//线性表中的链式存储结构
//第一个节点为头节点,并不真实保存数据,头节点基本代表了整个链表 import (
"fmt"
) type Elem int type LinkNode struct {
Data Elem
Next *LinkNode
} //生成头节点
func New() *LinkNode {
//下面的data可以用来表示链表的长度
return &LinkNode{0, nil}
} //在链表的第i个位置前插入一个元素e,复杂度为o(n)
func (head *LinkNode) Insert(i int, e Elem) bool {
p := head
j := 1
for nil != p && j < i {
p = p.Next
j++
}
if nil == p || j > i {
fmt.Println("pls check i:", i)
return false
}
s := &LinkNode{Data: e}
s.Next = p.Next
p.Next = s
return true
} //遍历链表
func (head *LinkNode) Traverse() {
point := head.Next
for nil != point {
fmt.Println(point.Data)
point = point.Next
}
fmt.Println("--------done----------")
} //删除链表中第i个节点,复杂度为o(n)
func (head *LinkNode) Delete(i int) bool {
p := head
j := 1
for (nil != p && j < i) {
p = p.Next
j++
}
if nil == p || j > i {
fmt.Println("pls check i:", i)
return false
} p.Next = p.Next.Next
return true
} // 获取链表中的第i个元素,复杂度为o(n)
func (head *LinkNode) Get(i int) Elem {
p := head.Next
for j:= 1; j< i ;j++ {
if nil == p {
//表示返回错误
return -100001
}
p=p.Next
} return p.Data
} func main() {
linkedList := New()
linkedList.Insert(1, 9)
linkedList.Insert(1, 99)
linkedList.Insert(1, 999)
linkedList.Insert(1, 9999)
linkedList.Insert(1, 99999)
linkedList.Insert(1, 999999)
linkedList.Traverse() linkedList.Delete(4)
linkedList.Traverse() e := linkedList.Get(4)
fmt.Println(e)
}

数据结构之单链表(golang版)的更多相关文章

  1. C语言实现单链表-03版

    在C语言实现单链表-02版中我们只是简单的更新一下链表的组织方式: 它没有更多的更新功能,因此我们这个版本将要完成如下功能: Problem 1,搜索相关节点: 2,前插节点: 3,后追加节点: 4, ...

  2. C语言实现单链表-02版

    我们在C语言实现单链表-01版中实现的链表非常简单: 但是它对于理解单链表是非常有帮助的,至少我就是这样认为的: 简单的不能再简单的东西没那么实用,所以我们接下来要大规模的修改啦: Problem 1 ...

  3. Python数据结构之单链表

    Python数据结构之单链表 单链表有后继结点,无前继结点. 以下实现: 创建单链表 打印单链表 获取单链表的长度 判断单链表是否为空 在单链表后插入数据 获取单链表指定位置的数据 获取单链表指定元素 ...

  4. javascript数据结构之单链表

    下面是用javascript实现的单链表,但是在输出的时候insert方法中存在问题,chrome的console报错说不能读取空的属性,调试了很久都没有通过,先在这里存着,以后再来修改一下. //数 ...

  5. 数据结构之单链表的实现-java

    一.单链表基本概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元(一般是非连续存储单元)存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素data + 指针next ...

  6. 数据结构:单链表结构字符串(python版)添加了三个新功能

    #!/urs/bin/env python # -*- coding:utf-8 -*- #异常类 class stringTypeError(TypeError): pass #节点类 class ...

  7. 数据结构:单链表结构字符串(python版)改进

    此篇文章的replace实现了字符串类的多次匹配,但依然有些不足. 因为python字符串对象为不变对象,所以replace方法并不修改原先的字符串,而是返回修改后的字符串. 而此字符串对象时用单链表 ...

  8. 数据结构:单链表结构字符串(python版)

    #!/urs/bin/env python # -*- coding:utf-8 -*- #异常类 class stringTypeError(TypeError): pass #节点类 class ...

  9. golang数据结构之单链表

    实现单链表的增删查改. 目录如下: singleLink.go package link import ( "fmt" ) //HeroNode 链表节点 type HeroNod ...

随机推荐

  1. [Javascript] Correctly Type-Checking Numbers

    There are two ways to correctly type checks number: console.log(typeof 99.66); // number console.log ...

  2. hbuilder离线打包iOS,xcode开发卡在启动页注意点

    1.Display Name的名称与manifest.json中的name保持一致. 2.项目文件夹名.contro.xml中的appid.manifest.json中的id一致

  3. 并发编程入门(二):分析Boost对 互斥量和条件变量的封装及实现生产者消费者问题

    请阅读上篇文章<并发编程实战: POSIX 使用互斥量和条件变量实现生产者/消费者问题>.当然不阅读亦不影响本篇文章的阅读. Boost的互斥量,条件变量做了很好的封装,因此比" ...

  4. Windows:获取本地时间

    造冰箱的大熊猫@cnblogs 2019/6/4 #include <windows.h> int func() { SYSTEMTIME systime; GetLocalTime ( ...

  5. SSH 中文乱码解决

    在终端执行命令:export LC_ALL=zh_CN.GB2312;export LANG=zh_CN.GB2312是最有效的. 这种方法是临时的,只对当前SSH客户端有效,重启后依然乱码. 1.不 ...

  6. 使用ImageProcessor、CodeCarvings.Piczard组件生成缩略图和添加水印

    技术栈: 1.ImageProcessor(专业图像处理,不能合成水印,NetCore中有它的升级版ImageSharp目前是预览包) 2.CodeCarvings.Piczard(缩略图,水印都能搞 ...

  7. linux下通过进程名查看其占用端口

    linux下通过进程名查看其占用端口: 1.先查看进程pid ps -ef | grep 进程名 2.通过pid查看占用端口 netstat -nap | grep 进程pid 例:通过nginx进程 ...

  8. MongoDB系列二:MongoDB安装过程

    一.MongoDB安装,以Linux系统安装为例:(下载:www.mongodb.org 注意使用stable版本) 1.下载最新版本的MongoDB安装包,wget http://fastdl.mo ...

  9. python 列表切片之负数的含义代码示例

    a = list(range(10)) print(a[::]) #复制一个列表 print(a[::2]) #每隔2个取一次 print(a[::3]) #每隔3个取一次 print(a[::-1] ...

  10. 整个系统禁用复制功能下,js实现部分数据的复制功能

    需求背景:整个系统禁止复制,列表页操作栏新增按钮来复制数据列的手机号功能 感受下是怎么回事?看下效果 (GIF有点点烂)