类数据

public class Objects
{
private int number; /**//* 货物编号 */
private string name; /**//* 货物名称 */
private int counter; /**//* 货物数量 */ //构造函数
public Objects(int num, string Name, int count)
{
number = num;
name = Name;
counter = count;
}
public int Number
{
get
{
return number;
}
set
{
number = value;
}
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public int Counter
{
get
{
return counter;
}
set
{
counter = value;
}
}
}

链表节点

// 结点类
public class ListNode
{
public ListNode(Objects bugs)
{
goods = bugs;
}
/**/
/// <summary>
/// 前一个
/// </summary>
public ListNode Previous; /**/
/// <summary>
/// 后一个
/// </summary>
public ListNode Next;
public ListNode next
{
get
{
return Next;
}
set
{
Next = value;
}
}
/**/
/// <summary>
/// 值
/// </summary>
public Objects goods;
public Objects Goods
{
get
{
return goods;
}
set
{
goods = value;
}
}
}

链表结构类

初始化构造函数

        public Clists()
{
//构造函数
//初始化
ListCountValue = 0;
Head = null;
Tail = null;
}
/**/
/// <summary>
/// 表名
/// </summary>
private string clistname = "";
public string ClistName
{
get
{
return clistname;
}
set
{
clistname = value;
}
}
/**/
/// <summary>
/// 头指针
/// </summary>
private ListNode Head; /**/
/// <summary>
/// 尾指针
/// </summary>
private ListNode Tail; /**/
/// <summary>
/// 当前指针
/// </summary>
private ListNode Current;
public ListNode current
{
get
{
return Current;
}
set
{
Current = value;
}
} /**/
/// <summary>
/// 链表数据的个数
/// </summary>
private int ListCountValue;

链表尾部添加数据

    /// <summary>
/// 尾部添加数据
/// </summary> public void Append(Objects DataValue)
{
ListNode NewNode = new ListNode(DataValue); if (IsNull()) //如果头指针为空
{
Head = NewNode; Tail = NewNode;
}
else
{
Tail.Next = NewNode; NewNode.Previous = Tail; Tail = NewNode;
} Current = NewNode; //链表数据个数加一 ListCountValue += 1; }

删除当前数据

      /// <summary>
/// 删除当前的数据
/// </summary>
public void Delete()
{
//若为空链表 if (!IsNull())
{
//若删除头 if (IsBof())
{
Head = Current.Next;
Current = Head;
ListCountValue -= 1;
return;
} //若删除尾 if (IsEof())
{
Tail = Current.Previous; Tail.next = null; Current = Tail; ListCountValue -= 1; return;
} //若删除中间数据 Current.Previous.Next = Current.Next; Current = Current.Previous; ListCountValue -= 1; return;
}
}
/**/
/// <summary>
/// 向后移动一个数据
/// </summary>
public void MoveNext()
{
if (!IsEof()) Current = Current.Next;
}
/**/
/// <summary>
/// 向前移动一个数据
/// </summary>
public void MovePrevious()
{
if (!IsBof()) Current = Current.Previous;
}
/**/
/// <summary>
/// 移动到第一个数据
/// </summary>
public void MoveFrist()
{
Current = Head;
} /**/
/// <summary>
/// 移动到最后一个数据
/// </summary>
public void MoveLast()
{
Current = Tail;
}
/**/
/// <summary>
/// 判断是否为空链表
/// </summary>
public bool IsNull()
{
if (ListCountValue == 0)
return true;
else
return false;
} /**/
/// <summary>
/// 判断是否为到达尾部
/// </summary>
public bool IsEof()
{
if (Current == Tail)
return true;
else
return false;
}
/**/
/// <summary>
/// 判断是否为到达头部
/// </summary>
public bool IsBof()
{
if (Current == Head)
return true;
else
return false; } public Objects GetCurrentValue()
{
return Current.goods;
} /**/
/// <summary>
/// 取得链表的数据个数
/// </summary> public int ListCount
{
get
{
return ListCountValue;
}
}

清空链表

 /// <summary>
/// 清空链表
/// </summary> public void Clear()
{
MoveFrist();
while (!IsNull())
{
//若不为空链表,从尾部删除
Delete();
}
}

插入链表

        /// <summary>
/// 在当前位置前插入数据
/// </summary> public void Insert(Objects DataValue)
{
ListNode NewNode = new ListNode(DataValue);
if (IsNull())
{
//为空表,则添加
Append(DataValue);
return;
} if (IsBof())
{
//为头部插入
NewNode.Next = Head;
Head.Previous = NewNode;
Head = NewNode;
Current = Head;
ListCountValue += 1;
return;
}
//中间插入
NewNode.Next = Current;
NewNode.Previous = Current.Previous;
Current.Previous.Next = NewNode;
Current.Previous = NewNode;
Current = NewNode;
ListCountValue += 1;
}

升序插入

   /// <summary>
/// 进行升序插入
/// </summary> public void InsertAscending(Objects InsertValue)
{
//参数:InsertValue 插入的数据
//为空链表
if (IsNull())
{
//添加
Append(InsertValue);
return;
}
//移动到头
MoveFrist();
if ((InsertValue.Number < GetCurrentValue().Number))
{
//满足条件,则插入,退出
Insert(InsertValue);
return;
}
while (true)
{
if (InsertValue.Number < GetCurrentValue().Number)
{
//满族条件,则插入,退出
Insert(InsertValue);
break;
} if (IsEof())
{
//尾部添加
Append(InsertValue);
break;
}
//移动到下一个指针
MoveNext();
}
}

降序插入

    /// <summary>
/// 进行降序插入
/// </summary> /**/
/*货物入库*/
public void InsertUnAscending(Objects InsertValue)
{
//参数:InsertValue 插入的数据
//为空链表
if (IsNull())
{
//添加
Append(InsertValue);
return;
}
//移动到头
MoveFrist();
if (InsertValue.Number > GetCurrentValue().Number)
{
//满足条件,则插入,退出
Insert(InsertValue);
return;
}
while (true)
{
if (InsertValue.Number > GetCurrentValue().Number)
{
//满足条件,则插入,退出
Insert(InsertValue);
break;
} if (IsEof())
{
//尾部添加
Append(InsertValue);
break;
}
//移动到下一个指针
MoveNext();
}
}

链表应用例子

      //根据名字查询货物
public Objects FindObjects(string name)
{
ListNode lnode = Head;
if (IsNull())
{
return null;
}
else if (IsEof())
{
return null;
}
else
while (lnode.goods.Name != name)
{
if (lnode.Next == null)
{
Current = lnode;
return null;
}
lnode = lnode.Next;
}
Current = lnode;
return lnode.goods;
}
//根据编号查询货物
public Objects FindObjects(int number)
{
ListNode lnode = Head;
if (IsNull())
{
return null;
}
else if (IsEof())
{
return null;
}
else
while (lnode.goods.Number != number)
{
if (lnode.Next == null)
{
Current = lnode;
return null;
}
lnode = lnode.Next;
}
Current = lnode;
return lnode.goods;
}
/**/
/*货物出库*/
//根据名字删除货物
public Objects DeleteObjects(string name)
{
Objects bugs;
bugs = FindObjects(name);
Delete();
return bugs;
}
//根据编号删除货物
public Objects DeleteObjects(int number)
{
Objects bugs;
bugs = FindObjects(number);
Delete();
return bugs;
}

C# 双向链表的实现的更多相关文章

  1. 学习Redis你必须了解的数据结构——双向链表(JavaScript实现)

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/ 下午分享了JavaScript实现单向链表,晚上就来补充下双向链表吧.对链表 ...

  2. 双向链表、双向循环链表的JS实现

    关于链表简介.单链表.单向循环链表.JS中的使用以及扩充方法:  单链表.循环链表的JS实现 关于四种链表的完整封装: https://github.com/zhuwq585/Data-Structu ...

  3. 剑指Offer面试题:25.二叉搜索树与双向链表

    一.题目:二叉搜索树与双向链表 题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向.比如输入下图中左边的二叉搜索树,则输出转换之后的 ...

  4. Linux 内核数据结构:Linux 双向链表

    Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到.我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为 ...

  5. Linux 内核数据结构:双向链表

    Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到.我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为 ...

  6. 线性表-双向链表(LinkedList)

    双向链表:如图1-3 所示,会把当前header拆分开,重新插入一个Entry<E>. LinkedList源码 0.首先这个类中的两个变量 private transient Entry ...

  7. Shuffling Machine和双向链表

    1. 双向链表 https://github.com/BodhiXing/Data_Structure 2. Shuffling Machine https://pta.patest.cn/pta/t ...

  8. MS - 1 - 把二元查找树转变成排序的双向链表

    ## 1. 把二元查找树转变成排序的双向链表 ## ### 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. ### 要求不能创建任何新的结点,只调整指针的指向. 10       ...

  9. javascript中的链表结构—双向链表

    1.概念 上一个文章里我们已经了解到链表结构,链表的特点是长度不固定,不用担心插入新元素的时候新增位置的问题.插入一个元素的时候,只要找到插入点就可以了,不需要整体移动整个结构. 这里我们了解一下双向 ...

  10. Java自己实现双向链表LinkList

    /** * <p> * Node 双向链表实体类 * <p> * * @author <a href="mailto:yangkj@corp.21cn.com& ...

随机推荐

  1. N100低功耗win11安装wsl2当入门nas

    前言 最近入了一台16gb+512gb的N100,想着用来存些资源,当个nas,偶尔要用用windows系统,所以想直接在这上面搞个虚拟机算了,WSL2似乎是一个不错的选择,下面介绍捣鼓的教程. 没用 ...

  2. PersistenceException、ReflectionException、IllegalArgumentException、wrapException持久性异常 反射异常 非法参数异常 包装异常

    PersistenceException.ReflectionException.IllegalArgumentException.wrapException wrapException 持久性异常 ...

  3. 在终端输入EOF

    在终端输入EOF 问题 如下是一个计算校验和的程序,其中使用了while循环,需要在标准输入中读取到EOF才能跳出循环. #include <stdio.h> int main(){ in ...

  4. 虚拟化H搭建

    虚拟化H搭建 H搭建所需要的硬件配置 最大值:所有组件不能超过160个cpu 按安装H需要2G内存+若干个guest(不明确多大),最大支持2个TB内存 最小磁盘2G 一个千兆网卡 lscpu信息 [ ...

  5. 2023-05-31:给定一个整数数组 A,你可以从某一起始索引出发,跳跃一定次数 在你跳跃的过程中,第 1、3、5... 次跳跃称为奇数跳跃 而第 2、4、6... 次跳跃称为偶数跳跃 你可以按以下

    2023-05-31:给定一个整数数组 A,你可以从某一起始索引出发,跳跃一定次数 在你跳跃的过程中,第 1.3.5... 次跳跃称为奇数跳跃 而第 2.4.6... 次跳跃称为偶数跳跃 你可以按以下 ...

  6. OSG嵌入QT的简明总结2

    正文 我之前在这篇博文<OSG嵌入QT的简明总结>中论述了OSG在QT中显示的可视化问题.其中提到官方提供的osgQt项目(地址:https://github.com/opensceneg ...

  7. 如何使用 Node.js Stream API 减少服务器端内存消耗?

    摘要:让我们看一个示例,展示在内存消耗方面,采用流的编程思路带来的巨大优越性. 本文分享自华为云社区<使用 Node.js Stream API 减少服务器端内存消耗的一个具体例子>,作者 ...

  8. 开抢| 华为开发者大会2021(Cloud)早鸟票来了!

    他们,是技术的引领者 他们,是科学的追随者 他们用代码守护蓝色星球的生态 破解宇宙深处的密码 化解城市生活的不畅 捉摸自然气候的脾性 ...... 这些改变世界的成果背后 每一个开发者都了不起 --那 ...

  9. 物联网设备上云难?华为云IoT帮你一键完成模型定义,快速在线调试设备

    摘要:在不到3分钟的操作里,不仅完成了一款智慧烟感设备在云端的模型定义,还通过在线调试了解到了设备和远端通信的过程. 本文分享自华为云社区<物联网设备上云难?华为云IoT帮你一键完成模型定义,快 ...

  10. 华为云发布ModelBox AI应用开发框架

    摘要:华为云ModelBox AI应用开发框架,打通端边云边界,助力开发者实现AI应用一次开发,全场景部署. 近日,以"因聚而生,为你所能"为主题的华为伙伴暨开发者大会 2022隆 ...