不常用,可以看一下实现原理

namespace UnilateralismChainTable
{
// 结点类
public class ListNode
{
public ListNode(int NewValue)
{
Value = NewValue;
} //前一个
public ListNode Previous; // 后一个
public ListNode Next; // 值
public int Value;
}
// 定义结点之后,开始类线性表的操作编程了.在LIST 类中,采用了,Head ,Tail, Current,三个指针,使用Append ,
//MoveFrist,MovePrevious,MoveNext,MoveLast ,Delete,InsertAscending,InsertUnAscending ,Clear 实现移动,添加,
//删除,升序插入,降序插入,清空链表操作,GetCurrentValue() 方法取得当前的值。
public class Clist
{
public Clist()
{
//构造函数
//初始化
ListCountValue = ;
Head = null;
Tail = null;
} // 头指针
private ListNode Head; // 尾指针
private ListNode Tail; // 当前指针
private ListNode Current; //链表数据的个数
private int ListCountValue; //尾部添加数据
public void Append(int DataValue)
{
ListNode NewNode = new ListNode(DataValue); if (IsNull()) //如果头指针为空
{
Head = NewNode;
Tail = NewNode;
}
else
{
Tail.Next = NewNode;
NewNode.Previous = Tail;
Tail = NewNode;
}
Current = NewNode;
//链表数据个数加一
ListCountValue += ;
}
//删除当前的数据
public void Delete()
{
//若为空链表
if (!IsNull())
{
//若删除头
if (IsBof())
{
Head = Current.Next;
Current = Head;
ListCountValue -= ;
return;
} //若删除尾
if (IsEof())
{
Tail = Current.Previous;
Current = Tail;
ListCountValue -= ;
return;
} //若删除中间数据
Current.Previous.Next = Current.Next;
Current = Current.Previous;
ListCountValue -= ;
return;
}
} // 向后移动一个数据
public void MoveNext()
{
if (!IsEof()) Current = Current.Next;
} // 向前移动一个数据
public void MovePrevious()
{
if (!IsBof()) Current = Current.Previous;
} // 移动到第一个数据
public void MoveFrist()
{
Current = Head;
} // 移动到最后一个数据
public void MoveLast()
{
Current = Tail;
} // 判断是否为空链表
public bool IsNull()
{
if (ListCountValue == )
return true; return false;
} // 判断是否为到达尾
public bool IsEof()
{
if (Current == Tail)
return true;
return false;
} // 判断是否为到达头部
public bool IsBof()
{
if (Current == Head)
return true;
return false; } public int GetCurrentValue()
{
return Current.Value;
} // 取得链表的数据个数
public int ListCount
{
get
{
return ListCountValue;
}
} // 清空链表
public void Clear()
{
MoveFrist();
while (!IsNull())
{
//若不为空链表,从尾部删除
Delete();
}
} // 在当前位置前插入数据
public void Insert(int DataValue)
{
ListNode NewNode = new ListNode(DataValue);
if (IsNull())
{
//为空表,则添加
Append(DataValue);
return;
} if (IsBof())
{
//为头部插入
NewNode.Next = Head;
Head.Previous = NewNode;
Head = NewNode;
Current = Head;
ListCountValue += ;
return;
}
//中间插入
NewNode.Next = Current;
NewNode.Previous = Current.Previous;
Current.Previous.Next = NewNode;
Current.Previous = NewNode;
Current = NewNode;
ListCountValue += ;
} // 进行升序插入
public void InsertAscending(int InsertValue)
{
//参数:InsertValue 插入的数据
//为空链表
if (IsNull())
{
//添加
Append(InsertValue);
return;
} //移动到头
MoveFrist();
if ((InsertValue < GetCurrentValue()))
{
//满足条件,则插入,退出
Insert(InsertValue);
return;
}
while (true)
{
if (InsertValue < GetCurrentValue())
{
//满族条件,则插入,退出
Insert(InsertValue);
break;
}
if (IsEof())
{
//尾部添加
Append(InsertValue);
break;
}
//移动到下一个指针
MoveNext();
}
}
//进行降序插入
public void InsertUnAscending(int InsertValue)
{
//参数:InsertValue 插入的数据
//为空链表
if (IsNull())
{
//添加
Append(InsertValue);
return;
}
//移动到头
MoveFrist();
if (InsertValue > GetCurrentValue())
{
//满足条件,则插入,退出
Insert(InsertValue);
return;
}
while (true)
{
if (InsertValue > GetCurrentValue())
{
//满族条件,则插入,退出
Insert(InsertValue);
break;
}
if (IsEof())
{
//尾部添加
Append(InsertValue);
break;
}
//移动到下一个指针
MoveNext();
}
}
} }

模拟货物的入库和出库:

namespace BothChainTable
{
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 class Clists
{
public Clists()
{
//构造函数
//初始化
ListCountValue = ;
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 += ; } /**/
/// <summary>
/// 删除当前的数据
/// </summary>
public void Delete()
{
//若为空链表 if (!IsNull())
{
//若删除头 if (IsBof())
{
Head = Current.Next;
Current = Head;
ListCountValue -= ;
return;
} //若删除尾 if (IsEof())
{
Tail = Current.Previous; Tail.next = null; Current = Tail; ListCountValue -= ; return;
} //若删除中间数据 Current.Previous.Next = Current.Next; Current = Current.Previous; ListCountValue -= ; 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 == )
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 += ;
return;
}
//中间插入
NewNode.Next = Current;
NewNode.Previous = Current.Previous;
Current.Previous.Next = NewNode;
Current.Previous = NewNode;
Current = NewNode;
ListCountValue += ;
} /**/
/// <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;
}
}
}

ListNode线性表的更多相关文章

  1. C语言 线性表 链式表结构 实现

    一个单链式实现的线性表 mList (GCC编译). /** * @brief 线性表的链式实现 (单链表) * @author wid * @date 2013-10-21 * * @note 若代 ...

  2. 线性表(gcc实现)

    线性结构: ①存在一个唯一的被称为“第一个”的数据元素: ②存在一个唯一的被称为“最后一个”的数据元素: ③除第一个元素外,每个元素均有唯一一个直接前驱: ④除最后一个元素外,每个元素均有唯一一个直接 ...

  3. 数据结构与算法(C#)入门 --- 线性表

    线性表: 线性表是最简单,最基本,最常用的数据结构.线性表中的数据元素之间存在一对一的关系.即:除了第一个元素,其他元素前面有且只有一个元素:除了最后一个元素,其他元素后面有且只有一个元素.生活中的例 ...

  4. 第2章 线性表《C#数据结构和算法》

    ( )除第一个位置的数据 元素外,其它数据元素位置的前面都只有一个数据元素:( )除最后一个位置的 数据元素外,其它数据元素位置的后面都只有一个元素.也就是说,数据元素是 一个接一个的排列.因此,可以 ...

  5. c++实验3 链式存储线性表

    1.线性表链式存储结构及基本操作算法实现 (1)单链表存储结构类的定义: #include <iostream> using namespace std; template <cla ...

  6. 线性表 - C语言完整实现

    #include <stdio.h> #define false 0 #define true 1 #define MAXSIZE 20 typedef int bool; typedef ...

  7. 线性表的链式存储——C语言实现

    SeqList.h #ifndef _WBM_LIST_H_ #define _WBM_LIST_H_ typedef void List; typedef void ListNode; //创建并且 ...

  8. 线性表List

    数组array是基本的数据结构,但它的功能有限,线性表list可以认为是扩展了功能的数组.可以自动调整大小.添加和删除元素不需要其他元素移位. 根据指针数量和指向的不同,线性表分为单向链表.双向链表和 ...

  9. [从今天开始修炼数据结构]线性表及其实现以及实现有Itertor的ArrayList和LinkedList

    一.线性表 1,什么是线性表 线性表就是零个或多个数据元素的有限序列.线性表中的每个元素只能有零个或一个前驱元素,零个或一个后继元素.在较复杂的线性表中,一个数据元素可以由若干个数据项组成.比如牵手排 ...

随机推荐

  1. 纯CSS3彩色边线3D立体按钮制作教程

    原文:纯CSS3彩色边线3D立体按钮制作教程 今天我们来分享一款利用纯CSS3实现的3D按钮,这款按钮的一个特点是有彩色的边线,这让整个按钮显得比较多姿多彩,没那么枯燥无趣.本文不仅可以让大家看到演示 ...

  2. eclipse 配置android sdk和maven

    首先下载 ADT-22.2.0.rar eclipse-jee-kepler-R-win32-x86_64.zip android SDK4.2.zip 分别解压在一个盘 将ADT里面的两个目录内容相 ...

  3. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2) ...

  4. MPI编程简述

    第三章MPI计划 3.1 MPI简单介绍 多线程是一种便捷的模型,当中每一个线程都能够訪问其他线程的存储空间.因此,这样的模型仅仅能在共享存储系统之间移植. 一般来讲,并行机不一定在各处理器之间共享存 ...

  5. 使用php-fpm状态页观察当前的php-fpm状态

    对于php-fpm的參数设置,非常多情况下有这种疑问,就是内置的几个參数比如pm.max_children,pm.start_servers等这几个參数究竟该设置最多为多少才合适.事实上这几个參数往往 ...

  6. 无废话WCF入门教程二[WCF应用的通信过程]

    一.概述 WCF能够建立一个跨平台的安全.可信赖.事务性的解决方案,是一个WebService,.Net Remoting,Enterprise Service,WSE,MSMQ的并集,有一副很经典的 ...

  7. 【Android UI设计和开发】动画(Animation)详细说明(一)

    Android开发之动画效果浅析 请尊重他人的劳动成果.转载请注明出处:Android开发之动画效果浅析 程序执行效果图: Android动画主要包括补间动画(Tween)View Animation ...

  8. .net 控件开发第二天 怎么将 第一天写的代码 用到 .net中来

    前面第一天 我们看到的全是 js的代码,虽然不管是BS的框架是java 还是 php,复用性 还是特别高的,  但是 写起来比较费劲,怎么办,我们能不能 更 简单点呢? 当然可以,这个时候我们就要用到 ...

  9. C# 打开指定文件或网址

    System.Diagnostics.Process.Start的妙用: 文件夹打开时自动选中一个文件,比如自动选中此目录下的指定文件方法: Process.Start("Explorer& ...

  10. sql server drop talbe 自动删除关联的外键 ,权限体系(二)

    alter table dbo.Sys_PowerTeamForUser add constraint FK_Sys_User_Sys_PowerTeamForUser foreign key (Sy ...