IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> go 数据结构 链表 -> 正文阅读

[数据结构与算法]go 数据结构 链表

###链表
    链表是一种物理上非顺序的一种线性的数据结构。链表由一系列节点组成,节点在运动时动态生成。每个节点包括两个部分:存储下
    个节点的指针与该节点存储的数据。
    
*链表的主要操作有
 1. func (this *ListNode) FindEleByIndex(K int) ElementType :根据位序K,返回响应元素
 2. func (this *ListNode) FindFristEleIndex(ele ElementType) int:在线性表L中查找E的第一次出现的位置
 3. func (this *ListNode) Insert(ele ElementType, i int) :在位序I前插入一个新元素E
 4. func (this *ListNode) Delete(i int) ListNode :删除指定位序I的元素
 5. func (this *ListNode) Length() int: 返回线性表L的长度  

package main

import (
	"errors"
	"fmt"
)

/**
链表的的数据单元 数据类型可以随便定义  当然可以是一些简单的基本数据类型 例如 int float string
以下是例子 我将存储一些人员信息
*/
type ElementType struct {
	Name     string //姓名
	IDNumber string //身份证号
	Sex      bool   //性别
}

type ListNode struct {
	Man      ElementType
	NextNode *ListNode
}

//获取 链表长度
func (this *ListNode) Length() int {
	i := 0
	for this != nil {
		if this != nil {
			this = this.NextNode
			i++
		}
	}
	return i

}

// 返回第 i 个元素的位置
func (this *ListNode) FindEleByIndex(K int) (ElementType, error) {
	i := 1
	for this != nil {
		if K == i {
			return this.Man, nil
		}
		i++
		this = this.NextNode
	}
	return ElementType{}, errors.New("没有该节点")

}

//在链表表 L 中查找E的第一次出现的位置
func (this *ListNode) FindFristEleIndex(ele ElementType) int {
	i := 1
	for this != nil {
		if this.Man == ele {
			return i
		}
		this = this.NextNode
		i++
	}
	return -1
}

//在第I前插入一个新元素 兼容插到最后
func (this *ListNode) Insert(ele ElementType, i int) error {
	len := this.Length()
	if i > len+1 {
		return errors.New("i应 <= " + fmt.Sprint(len+1))
	}
	j := 1
	for this != nil {
		if j+1 == i {
			newNode := ListNode{Man: ele, NextNode: this.NextNode}
			this.NextNode = &newNode
			break
		}
		this = this.NextNode
		j++
	}

	return nil
}

//删除指定位序I的元素   这种实现方案个人觉得有点不符合规范  如果各位有无返回值的实现方案 欢迎评论留言
func (this *ListNode) Delete(i int) ListNode {
	j := 1
	if i == 1 {
		this = this.NextNode
		return *this
	}
	tem := this

	for this != nil {
		if j+1 == i {
			this.NextNode = this.NextNode.NextNode
			break
		}

		this = this.NextNode
		j++
	}
	return *tem
}

//遍历
func (this *ListNode) getAll() {
	for this != nil {
		fmt.Println(this.Man)
		this = this.NextNode
	}
}
func main() {
	//var NilPoint *ListNode
	//NilPoint = nil
	list := ListNode{Man: ElementType{Name: "xiao", IDNumber: "1", Sex: true}, NextNode: nil}

	list.Insert(ElementType{Name: "liu", IDNumber: "1", Sex: true}, 2)
	list.Insert(ElementType{Name: "liu2", IDNumber: "1", Sex: true}, 3)
	fmt.Println(list.Length())

	list = list.Delete(1)
	list.getAll()
	fmt.Println(list.FindFristEleIndex(ElementType{Name: "liu2", IDNumber: "1", Sex: true}))
	fmt.Println(list.FindEleByIndex(1))

}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-03 16:22:02  更:2022-01-03 16:23:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 18:24:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码