程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#數據結構-線性表

C#數據結構-線性表

編輯:關於C#

理論基礎:

線性表是最簡單、最基本、最常用的數據結構。線性表是線性結構的抽象(Abstract),線性結構的特點是結構中的數據元素之間存在一對一的線性關系。這種一對一的關系指的是數據元素之間的位置關系,即:

(1)除第一個位置的數據元素外,其它數據元素位置的前面都只有一個數據元素;

(2)除最後一個位置的數據元素外,其它數據元素位置的後面都只有一個元素。

也就是說,數據元素是一個接一個的排列。因此,可以把線性表想象為一種數據元素序列的數據結構。

線性表(List)是由n(n≥0)個相同類型的數據元素構成的有限序列.

注意:“有限”,指的是線性表中的數據元素的個數是有限的,線性表中的每一個數據元素都有自己的位置(Position)。本書不討論數據元素個數無限的線性表。

“相同類型”,指的是線性表中的數據元素都屬於同一種類型。

C#實現:

1接口

由於現在只考慮線性表的基本操作,所以以C#接口的形式表示線性表,接口中的方法成員表示基本操作。並且,為了使線性表對任何數據類型都適用,數據元素的類型使用泛型的類型參數。在實際創建線性表時,元素的實際類型可以用應用程序中任何方便的數據類型來代替,比如用簡單的整型或者用戶自定義的更復雜的類型來代替。

線性表的接口如下所示。

Code

[copy to clipboard]

CODE:

1 public interface IListDS<T>
2  {
3    /**//// <summary>
4    /// 獲取長度
5    /// </summary>
6    /// <returns></returns>
7    int GetLength();
8
9    /**//// <summary>
10    /// 清空操作
11    /// </summary>
12    void Clear();
13
14    /**//// <summary>
15    /// 判斷線性表是否為空
16    /// </summary>
17    /// <returns></returns>
18    bool IsEmpay();
19
20    /**//// <summary>
21    /// 附加操作,線性表未滿,將值為item的新元素添加到末尾
22    /// </summary>
23    /// <param name="item"></param>
24    void Append(T item);
25
26    /**//// <summary>
27    /// 插入操作
28    /// </summary>
29    /// <param name="item"></param>
30    /// <param name="i"></param>
31    void Insert(T item,int i);
32
33    /**//// <summary>
34    /// 刪除操作
35    /// </summary>
36    /// <param name="i"></param>
37    /// <returns></returns>
38    T Delete(int i);
39
40    /**//// <summary>
41    /// 去表元
42    /// </summary>
43    /// <param name="i"></param>
44    /// <returns></returns>
45    T GetElem(int i);
46
47    /**//// <summary>
48    /// 按值查找
49    /// </summary>
50    /// <param name="value"></param>
51    /// <returns></returns>
52    int Locate(T value);
53  }

2 實現

實現過程中,算法時間復雜度沒有做過多的考慮和計算,有興趣的朋友可以完成

Code

[copy to clipboard]

CODE:

1/**//// <summary>
 2  /// 線性表
 3  /// </summary>
 4  /// <typeparam name="T"></typeparam>
 5  public class SeqList<T> : IListDS<T>
 6  {
 7    private int maxsize; //順序表的容量
 8    private T[] data;  //數組,用於存儲順序表中的數據元素
 9    private int last;  //指示順序表最後一個元素的位置
10
11    //索引器
12    public T this[int index]
13    {
14      get
15      {
16        return data[index];
17      }
18      set
19      {
20        data[index] = value;
21      }
22    }
23
24    //最後一個數據元素的位置屬性
25    public int List
26    {
27      get
28      {
29        return last;
30      }
31    }
32
33    //容量屬性
34    public int MaxSize
35    {
36      get
37      {
38        return maxsize;
39
40      }
41      set
42      {
43        maxsize = value;
44      }
45    }
46
47    //構造函數
48    public SeqList(int size)
49    {
50      data = new T[size];
51      maxsize = size;
52      last = -1;
53    }
54    /**//// <summary>
55    /// 獲取長度
56    /// </summary>
57    /// <returns></returns>
58    public int GetLength()
59    {
60      return last + 1;
61    }
62
63    /**//// <summary>
64    /// 清空操作
65    /// </summary>
66    public void Clear()
67    {
68      last = -1;    
69    }
70
71
72    /**//// <summary>
73    /// 判斷線性表是否為空
74    /// </summary>
75    /// <returns></returns>
76    public bool IsEmpay()
77    {
78      if (last == -1)
79      {
80        return true;
81      }
82      else
83      {
84        return false;
85      }
86    }
87
88    /**//// <summary>
89    /// 判斷線性表是否已滿
90    /// </summary>
91    /// <returns></returns>
92    public bool IsFull()
93    {
94      if (last == maxsize - 1)
95      {
96        return true;
97      }
98      else
99      {
100        return false;
101      }
102    }
103
104    /**//// <summary>
105    /// 附加操作,線性表未滿,將值為item的新元素添加到末尾
106    /// </summary>
107    /// <param name="item"></param>
108   public void Append(T item)
109    {
110      if (IsFull())
111      {
112        Console.Write("list is full");
113        return;
114      }
115
116      data[++last] = item;
117    }
118
119    /**//// <summary>
120    /// 插入操作
121    /// </summary>
122    /// <param name="item"></param>
123    /// <param name="i"></param>
124    public void Insert(T item, int i)
125    {
126      if (IsFull())
127      {
128        Console.Write("List is full");
129        return;
130      }
131
132      if (i < 1 || i > last + 2)
133      {
134        Console.Write("Posotion is error");
135        return;
136      }
137
138      if (i == last + 2)
139      {
140        data[last + 1] = item;
141      }
142      else
143      {
144        for (int j = last; j >= i - 1; --j)
145        {
146          data[j + 1] = data[j];
147        }
148        data[i - 1] = item;
149      }
150      ++last;
151    }
152
153    /**//// <summary>
154    /// 刪除操作
155    /// </summary>
156    /// <param name="i"></param>
157    /// <returns></returns>
158    public T Delete(int i)
159    {
160      T t = default(T);
161      if (IsEmpay())
162      {
163        Console.Write("List is empty!");
164        return t;
165      }
166      if (i < 1 || i > last + 1)
167      {
168        Console.Write("Position is Error");
169        return t;
170      }
171      if (i == last + 1)
172      {
173        t = data[last--];
174
175      }
176      else
177      {
178        t = data[i - 1];
179        for (int j = i; j <= last; j++)
180        {
181          data[j] = data[j + 1];
182        }
183      }
184      --last;
185      return t;
186
187    }
188
189    /**//// <summary>
190    /// 取表元
191    /// </summary>
192    /// <param name="i"></param>
193    /// <returns></returns>
194    public T GetElem(int i)
195    {
196      T t = default(T);
197      if (IsEmpay())
198      {
199        Console.Write("List is Empty");
200        return t;
201      }
202
203      if (i < 1 || i > last + 1)
204      {
205        Console.Write("Position is error");
206        return t;
207      }
208      return data[i - 1];
209
210    }
211
212    /**//// <summary>
213    /// 按值查找
214    /// </summary>
215    /// <param name="value"></param>
216    /// <returns></returns>
217    public int Locate(T value)
218    {
219      if (IsEmpay())
220      {
221        Console.Write("List is empty");
222        return -1;
223      }
224
225      int i = 0;
226      for ( i = 0; i <= last; ++i)
227      {
228        if (value.Equals(data))
229        {
230          break;
231        }
232      }
233      if (i > last)
234      {
235        return -1;
236      }
237      return i;
238    }
239  }

以上代碼用C#實現了線性表的操作,具體的測試沒有做,有興趣的朋友,可以寫一個簡單的測試程序。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved