2012-03-17 19:56:22
摘要:一、结点为LinkedListNode对象
该对象的实现如下
//在LinkedListT中LinkedListNodeT相互之间构成双向环状链表
//该双向环状链表通过内部成员next、prev来实现,但对于外部不可见
//对于外部Next、Previous表现为双向链表,首尾不构成环
public sealed class LinkedListNodeT
{
internal Link...
阅读全文
2012-03-14 18:54:23
摘要:List<T>类
一、采用数组保存数据
二、当数据空间不够时,扩大1倍空间
三、插入数据时最坏可能会带来n-1次数据复制
四、当删除数据时最坏可能带来n-1次数据复制
五、提供QuickSort排序和二分查找方法
阅读全文
2012-03-10 23:09:02
摘要:这篇文章是一些与线性表相关的算法
1.如果顺序表中每个元素都是整数,设计用最少时间把所有值为负数的元素放在全部正数值元素的前面。
2.如果顺序表为非递减有序排列,试删除顺序表中多余的值相同的元素。
3.编写一个单链表逆置算法。
4.找出单链表的中间元素。
阅读全文
2012-03-07 21:57:49
摘要:在双链表中,有些操作(如取元素、定位等)算法中仅涉及后继结点,此时双向链表的算法和单链表的算法均相同,但对插入、删除操作,双向链表需同时修改后继和前驱两个引用,比单链表要复杂一些
阅读全文
2012-03-04 20:34:02
摘要:线性表的链式表示就是采用链表实现存储,即表中数据元素是用一组任意的存储单元存储,它不要求逻辑上相邻的元素在物理位置上也相邻。这种数据结构有以下优点:其一,在进行插入和删除操作时,无需移动大量元素;其二,给长度变化较大的线性表无需预先分配最大空间;其三,表容量容易扩充。链表的特点是用一组任意的存储单元存储线性表的数据元素。因此,为了表示每个数据元素ai与其直接后继数据元素ai+1间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需要存储一个指示其直接后继的信息。这两部分信息组成数据元素ai的存储映像,称为结点(Node)。
阅读全文
2012-03-02 18:12:29
摘要:一、线性表概念
一个线性表由有限且有序的数据项组成。数据项称为元素。
每个表元素有相同的类型。
空表不含任何元素。
线性表的长度定义为表中所含元素的个数。
表的第一个元素称为表头。
表的最后一个元素称为表尾。
有序表是指表中元素的值按位置顺序递增或递减。
无序表是指表中元素的值与位置没有关系。
表的表示: ( a0, a1, …, an-1)
二、线性表的操作
1.初始化操作
初始条件:线性表不存在。
操作结果:创建一个空的线性表。
2.插入操作:InsertNode(T a, int i)
初始条件:线性表存在,插入位置正确(i= i =n+1,n为插入前的表长)。
操作结果:在线性表的第i个位置上插入一个值为 a 的新元素,这样使得原序号为 i,i+1,...,n的数据元素的序号变为 i+1,i+2,...,n+1,插入后表长为 n+1。
3.删除操作:DeleteNode(int i)
初始条件:线性表存在且不为空,删除位置正确(1= i =n,n为删除前的表长)。
操作结果:在线性表中删除序号为 i 的数据元素,返回删除后的数据元素。删除后使得原序号为 i+1,i+2,...,n的数据元素的序号变为 i,i+1,...,n-1,插入后表长为 n-1。
4.取表元素:SearchNode(int i)
初始条件:线性表存在,所取数据元素位置正确(1= i =n,n为线性表的表长)。
操作结果:返回线性表中第 i 个数据元素。
5.定位元素:SearchNode(T value)
初始条件:线性表存在。
操作结果:在线性表中查找值为value的数据元素,其结果返回在线性表中首次出现的值为value的数据元素的序号,称为查找成功;否则,线性表中未找到值为value的数据元素,返回一个特殊值表示查找失败。
6.求表长:GetLength()
初始条件:线性表存在。
操作结果:返回线性表中所有数据元素的个数。
7.清空操作:Clear()
初始条件:线性表存在且有数据元素。
操作结果:从线性表中清除所有数据元素,线性表为空。
8.判断线性表是否为空:IsEmpty()
初始条件:线性表存在。
操作结果:如果线性表中不包含任何元素则返回true,否则返回false。
……
阅读全文