C#线性表之顺序表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

以上是关于C#线性表之顺序表的主要内容,如果未能解决你的问题,请参考以下文章

数据结构——线性表之顺序表篇

数据结构之顺序表

数据结构之线性表之顺序存储Java实现

线性链表之顺序表

线性表之顺序表

线性链表之顺序表