C#的链表操作[数据结构-线性表]
链式存储结构图解:

上图中,a1,是数据,紧跟着后面的d1是下一个节点的地址值。也就是一个节点的最后存储的是下一个节点的地址值,最后一个节点的存储的下一个地址值是null,代表链表结束。
1,定义链表类
/// <summary>
/// 单项链表
/// </summary>
public class Node
{
/// <summary>
/// 指针:链表节点的引用,指向下一个节点
/// </summary>
public Node next;
/// <summary>
/// 链表节点对象,即链表的内容
/// </summary>
public object data;
public Node(object data)
{
this.data = data;
next = null;
}
}
2,链表的操作类
/// <summary>
/// 链表操作
/// </summary>
public class LinkNode
{
/// <summary>
/// 链表头结点
/// </summary>
public Node head;
/// <summary>
/// 节点的位置
/// </summary>
private int pos = 0;
public LinkNode()
{
this.head = null;
}
/// <summary>
/// 链表是否为空
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
public bool IsEmpty(Node node)
{
bool b = false;
if (node == null)
{
b = true;
}
return b;
}
/// <summary>
/// 节点数
/// </summary>
/// <returns></returns>
public long Length()
{
return Length(head);
}
/// <summary>
/// 节点数
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
public long Length(Node node)
{
long len = 0;
while (node != null)
{
len++;
node = node.next;
}
return len;
}
/// <summary>
/// 增加节点
/// </summary>
/// <param name="o"></param>
/// <returns>头插法</returns>
public Node AddNodeHead(object o)
{
Node newNode = new Node(o);
if (IsEmpty(this.head))
{
this.head = newNode;
}
else
{
newNode.next = head;
head = newNode;
}
return this.head;
}
/// <summary>
/// 增加节点
/// </summary>
/// <param name="o"></param>
/// <returns>尾插法</returns>
public Node AddNodeAtLast(object o)
{
Node newNode = new Node(o);
Node p = head;
if (IsEmpty(head))
{
newNode.next = head;
head = newNode;
}
else
{
while (p.next != null)
{
p = p.next;
}
p.next = newNode;
}
return head;
}
/// <summary>
/// 在指定位置插入节点
/// </summary>
/// <param name="index">位置</param>
/// <param name="o">节点数据</param>
/// <returns></returns>
public Node Insert(int index, object o)
{
if (head == null)
{
head = null;
}
else
{
Node node = new Node(o);
long con = Length();//节点个数
if (index == 1)
{
node.next = head;
head = node;
}
else if (index == con)
{
Node p = head;
while (p.next != null)
{
p = p.next;
}
p.next = node;
}
else if (1 < index && index < con)
{
int pos = 1;
Node current = head;
Node previous = head;
while (pos != index)
{
previous = current;
current = current.next;
pos++;
}
node.next = current;
previous.next = node;
}
else
{
}
}
return head;
}
/// <summary>
/// 删除头节点
/// </summary>
/// <returns></returns>
public Node DeleteHead()
{
if (head != null)
{
head = head.next;
}
return head;
}
/// <summary>
/// 删除节点
/// </summary>
/// <returns></returns>
public Node Delete(int index)
{
int con = Convert.ToInt32(Length());
if (1 <= index && index <= con)
{
Node current = head;
Node previous = head;
int pos = 1;
while (pos != index)
{
pos++;
previous = current;
current = current.next;
}
if (current == head)
{
head = head.next;
}
else
{
previous.next = current.next;
}
}
return head;
}
/// <summary>
/// 反转链表
/// </summary>
/// <returns></returns>
public Node Reversal()
{
Node ReversalNode = head;
head = null;
while (ReversalNode != null)
{
AddNodeHead(ReversalNode.data);
ReversalNode = ReversalNode.next;
}
return head;
}
}
C#的链表操作[数据结构-线性表]的更多相关文章
- [数据结构-线性表1.2] 链表与 LinkedList<T>(.NET 源码学习)
[数据结构-线性表1.2] 链表与 LinkedList<T> [注:本篇文章源码内容较少,分析度较浅,请酌情选择阅读] 关键词:链表(数据结构) C#中的链表(源码) 可空类 ...
- [从今天开始修炼数据结构]线性表及其实现以及实现有Itertor的ArrayList和LinkedList
一.线性表 1,什么是线性表 线性表就是零个或多个数据元素的有限序列.线性表中的每个元素只能有零个或一个前驱元素,零个或一个后继元素.在较复杂的线性表中,一个数据元素可以由若干个数据项组成.比如牵手排 ...
- [置顶] ※数据结构※→☆线性表结构(stack)☆============栈 序列表结构(stack sequence)(六)
栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表.栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据.栈 ...
- C# 数据结构 线性表(顺序表 链表 IList 数组)
线性表 线性表是最简单.最基本.最常用的数据结构.数据元素 1 对 1的关系,这种关系是位置关系. 特点 (1)第一个元素和最后一个元素前后是没有数据元素,线性表中剩下的元素是近邻的,前后都有元素. ...
- Java数据结构-线性表之单链表LinkedList
线性表的链式存储结构,也称之为链式表,链表:链表的存储单元能够连续也能够不连续. 链表中的节点包括数据域和指针域.数据域为存储数据元素信息的域,指针域为存储直接后继位置(一般称为指针)的域. 注意一个 ...
- C语言 严蔚敏数据结构 线性表之链表实现
博主最近在考成都大学皇家计算机科学与技术专业,复习专业课数据结构,正好学习到线性结构中的线性表用链表这种存储结构来实现. 首先,数据结构包括1.数据的操作2.逻辑结构3.存储结构(数据结构三要素. 直 ...
- C数据结构 : 线性表 与 链表
一.线性表 一般表现为数组,使用一组地址连续的存储单元依次存储数据元素,如图: 它具有如下特点: 长度固定,必须在分配内存之前确定数组的长度. 存储空间连续,即允许元素的随机访问. 存储密度大,内存中 ...
- c数据结构 -- 线性表之 顺序存储结构 于 链式存储结构 (单链表)
线性表 定义:线性表是具有相同特性的数据元素的一个有限序列 类型: 1:顺序存储结构 定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构 算法: #include <stdio. ...
- 数据结构线性表(js实现)
最近在复习数据结构的过程中,发现基本上数据结构都是用C来实现的,自己之前学习的时候也是用C去写的,由于目前对js更为熟悉一些,所以这里选择使用js去实现其中的某些算法和结构.实际上算法和语言关系不大, ...
随机推荐
- ajax向后台请求数据,后台接收到数据并进行了处理,但前台就是调用error方法
如果你的前台页面书写正确的情况下,并且运行情况和本文题目类似,那不妨试试这个: 在ajax方法中加上:async:false,让ajax同步执行. 因为ajax默认是异步的,至于为什么会不执行succ ...
- 高性能优化规范建议Mysql
Mysql高性能优化规范建议 https://www.cnblogs.com/huchong/p/10219318.html 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据 ...
- 关于 unable to load shared object 'C:\Program Files\R\R-3.0.3\library\stats\libs\i386\stats.dll'
其实这个问题很简单就是,在R目录下的:C:\Program Files\R\R-3.0.3\library\stats\libs\i386这个目录下,拷贝一份:这个目录下的文件:C:\Program ...
- [LeetCode系列] K节点倒序问题迭代解法
给定链表和整数k, 使用in-space方法将链表按k个为一组进行倒序, 如果剩余个数不足k个则保留其原始顺序. 如给定1->2->3->4->5, k = 2, 需要返回 2 ...
- postgresql PL/pgSQL—存储过程结构和变量声明
ref: https://www.postgresql.org/docs/9.6/static/plpgsql-structure.html 一. 函数结构 CREATE FUNCTION somef ...
- 阿里云OSS linux使用备忘录
ossutil config example: accessKeyId = "AccessKeyId"; accessKeySecret = "AccessKeySecr ...
- c# 设置自动隐藏任务栏、获取状态
from: http://stackoverflow.com/questions/1381821/how-to-toggle-switch-windows-taskbar-from-show-to-a ...
- Makefile中进行宏定义-***
实际上是gcc命令支持-D宏定义,相当于C中的全局#define: gcc -D name gcc -D name=definition Makefile中可以定义变量(和宏很像),但是是给make解 ...
- ps -ef 输出具体含义
ps -ef 输出具体含义 UID PID PPID C STIME TTY TIME CMD 各相关信息的意义: UID 程序被该 UID 所拥有 PID 就是这 ...
- mysql-7事务管理
1.事务的使用场景 mysql事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人愿,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数 ...