C#线性表之顺序表

  线性表是最简单、最基本、最常用的数据结构。线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系。 这种一对一的关系指的是数据元素之间的位置关系,即: (1)除第一个位置的数据元素外,其它数据元素位置的前面都只有一个数据元素; (2)除最后一个位置的数据元素外,其它数据元素位置的后面都只有一个元素。也就是说,数据元素是一个接一个的排列。因此,可以把线性表想象为一种数据元素序列的数据结构。

线性表的接口如下所示。

public interface IListDS<T>//线性表的接口
    {
        int GetLength(); //求长度
        void Clear(); //清空操作
        bool IsEmpty(); //判断线性表是否为空
        bool IsFull();
        void Append(T item); //附加操作
        void Insert(T item, int i); //插入操作
        T Delete(int i); //删除操作
        T GetElem(int i); //取表元
        int Locate(T value); //按值查找
        void Reverse();//倒置
    }

  在计算机内,保存线性表最简单、最自然的方式,就是把表中的元素一个接一个地放进顺序的存储单元,这就是线性表的顺序存储(Sequence Storage)。线性表的顺序存储是指在内存中用一块地址连续的空间依次存放线性表的数据元素,用这种方式存储的线性表叫顺序表(Sequence List)。顺序表的特点是表中相邻的数据元素在内存中存储位置也邻。

  1 public class SeqList<T> : IListDS<T>
  2     {
  3         private int last;
  4         private int maxSize;
  5         private T[] data;
  6
  7         public T this[int index]
  8         {
  9             get { return data[index]; }
 10             set { data[index] = value; }
 11         }
 12         public SeqList(int size)
 13         {
 14             maxSize = size;
 15             data = new T[size];
 16             last = -1;
 17         }
 18         public int Last
 19         {
 20             get { return last; }
 21         }
 22         public int MaxSize
 23         {
 24             get { return maxSize; }
 25             set { maxSize = value; }
 26         }
 27
 28         public int GetLength()
 29         {
 30             return last + 1;
 31         }
 32
 33         public void Clear()
 34         {
 35             last = -1;
 36         }
 37
 38         public bool IsEmpty()
 39         {
 40             return last == -1;
 41         }
 42         public bool IsFull()
 43         {
 44             return last == maxSize - 1;
 45         }
 46         public void Append(T item)
 47         {
 48             if (IsFull())
 49             {
 50                 Console.WriteLine("List is full");
 51                 return;
 52             }
 53             data[++last] = item;
 54         }
 55
 56         public void Insert(T item, int i)
 57         {
 58             if (IsFull())
 59             {
 60                 Console.WriteLine("List is full");
 61                 return;
 62             }
 63             if (i < 1 || i > last + 2)
 64             {
 65                 Console.WriteLine("Position is error!");
 66                 return;
 67             }
 68             if (i == last + 2)
 69             {
 70                 data[last + 1] = item;
 71             }
 72             else
 73             {
 74                 for (int j = i - 1; j <= last; j++)
 75                 {
 76                     data[j + 1] = data[j];
 77                 }
 78                 data[i - 1] = item;
 79             }
 80             ++last;
 81         }
 82
 83         public T Delete(int i)
 84         {
 85             T tmp = default(T);
 86             if (IsEmpty())
 87             {
 88                 Console.WriteLine("List is empty");
 89                 return tmp;
 90             }
 91             if (i < 1 || i > last + 1)
 92             {
 93                 Console.WriteLine("Position is error!");
 94                 return tmp;
 95             }
 96             if (i == last + 1)
 97             {
 98                 tmp = data[last];
 99             }
100             else
101             {
102                 tmp = data[i - 1];
103                 for (int j = i; j < last + 1; j++)
104                 {
105                     data[j] = data[j + 1];
106                 }
107             }
108             --last;
109             return tmp;
110         }
111
112         public T GetElem(int i)
113         {
114             if (IsEmpty() || i < 1 || i > last + 1)
115             {
116                 Console.WriteLine("List is empty or Position is error!");
117                 return default(T);
118             }
119             return data[i - 1];
120         }
121
122         public int Locate(T value)
123         {
124             if (IsEmpty())
125             {
126                 Console.WriteLine("List is empty!");
127                 return -1;
128             }
129             int i = 0;
130             for (i = 0; i <= last; i++)
131             {
132                 if (value.Equals(data[i]))
133                     break;
134             }
135             if (i > last)
136                 return -1;
137             return i;
138         }
139         public void Reverse()
140         {
141             T tmp = default(T);
142             int len = GetLength();
143             for (int i = 0; i <= len / 2; i++)
144             {
145                 tmp = data[i];
146                 data[i] = data[len - i];
147                 data[len - i] = tmp;
148             }
149         }
150     }
151 }
时间: 2024-10-23 02:06:49

C#线性表之顺序表的相关文章

线性表之顺序表奇偶调整和单链表就地逆置

线性表之顺序表奇偶调整,就是指将顺序表的奇数与偶数位置互换,以最优方法解决,因为方法很多,比如,开辟一个新的顺序表分别存放奇偶数,也可以从头向后寻找奇偶数放置到尾部或头部,但这些都会增大时间与空间的消耗.最优法则是前后分别寻找奇偶不同类型数,满足前奇后偶(或前偶后期),交换两数位置,实现时间复杂度O(n),空间O(1)的方案. void AdjustSqlist(SeqList *L) { int i=0,j=L->last; int temp; while(i<j) { while(L-&g

线性链表之顺序表

顺序表中数据元素的存储地址是其序号的线性函数,只要确定了存储顺序表的起始地址(即 基地址),计算任意一个元素的存储地址的时间是相等的,具有这一特点的存储结构称为[随机存储]. 使用的基本数据结构:数组 特点:顺序存取,随机访问. /* Name: SeqList Copyright: 1.0 Author: Johnny Zen Date: 04/06/17 21:51 Description: 线性链表之顺序表 *//* Chinese:顺序(线性)表 English:SeqList*/#in

线性表之顺序表C++实现

线性表之顺序表 一.头文件:SeqList.h //顺序线性表的头文件#include<iostream> const int MaxSize = 100;//定义顺序表SeqList的模板类template<class DataType>class SeqList{public: //顺序表无参构造器(创建一个空的顺序表) SeqList(){ length = 0 } //顺序表有参构造器(创建一个长度为n的顺序表) SeqList(DataType array[], int

【算法和数据结构】_17_小算法_线性结构:顺序表

/* 本程序用来测试数据结构中的线性结构:顺序表 */ #include <stdio.h> #include <stdlib.h> #define LINEAR_MAX_SIZE 64 struct LinearList { int* List; //顺序表指针 unsigned short int ListLen; //顺序表最大的元素个数 unsigned short int CurrentLen; //顺序表当前元素的个数 }; typedef struct LinearL

《数据结构》复习之线性表(顺序表和链表)

线性表的概念 线性表的比较 线性表的数据结构 顺序表的算法操作 双链表的补充 总结 1.线性表的概念 线性表的存储结构有顺序存储结构和链式存储结构两种.前者成为顺序表,后者称为链表. 顺序表: 顺序表就是把线性表中的所有元素按照其逻辑顺序,一次存储到从指定的存储 位置开始的一块连续的存储空间中,如下图所示. 链表 在链表的存储中,每一个节点不仅包含所存元素本身的信息,还包含元素之间的逻辑关系的信息,即前驱节点包含后继节点的地址信息,这样就可以通过前驱节点中的地址信息方便地找到后继节点的位置,如下

线性表之顺序表(C语言实现)

线性表是从数据元素的逻辑结构上定义的. 这种数据元素的逻辑结构的特征如下: 1.除开第一个和最后一个元素之外.所有元素都有一个前驱元素和后继元素. 2.第一个元素无前驱元素,但有后继元素. 3.最后一个元素有前驱元素,单无后继元素. 可以抽象为如下表述: 元素1 元素2 元素3 元素4 元素5 元素6 然而同一种逻辑结构在内存中却可以有两种存储方式:1.在内存中连续存储的线性表-----顺序表(如数组)                  2.在内存中离散存储的线性表-----链表(如单链表,双链

[C++] 数据结构(C):线性表之顺序表

1 顺序表 ADT + Status InitList(SeqList &L) 初始化顺序表 + Status GetElement(SeqList L, int i, ElementType &e) (按位)取值  + int LocateElement(SeqList L, ElementType e) (按值)查找  + Status ListInsert(SeqList &L, int i, ElementType e) (按位)插入  + Status ListDelet

数据结构-线性表_顺序表

进入大学一年了,今日终于有勇气写写随笔并展示出来了. 如有不足之处,请大家指正. 今日我想写的就是我对数据结构-线性表_顺序表的理解. 不BB了,进入正题!!!!! 数据结构中的逻辑结构分为线性结构和非线性结构,而线性表就属于线性结构. 线性结构是 n 个数据元素的有序(次序)集合,它有下列几个特征: 集合中必存在唯一的一个 "第一个元素": 集合中必存在唯一的一个 "最后的元素": 除最后元素之外,其它数据元素均有唯一的 "后继": 除第一元素

数据结构Java实现02----线性表与顺序表

[正文] 本节内容: 线性结构 线性表抽象数据类型 顺序表 顺序表应用 一.线性结构: 如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素: (2)第一个数据元素没有前驱数据元素: (3)最后一个数据元素没有后继数据元素. 则称这样的数据结构为线性结构. 二.线性表抽象数据类型: 1.线性表抽象数据类型的概念: 线性表抽象数据类型主要包括两个方面:既数据集合和该数据集合上的操作集合. 数据集合: 可以表示为a0,a1,a2,...a