線性表(linear list)是由n(n≥0)個資料元素(結點)a1,a2,…,an組成的有限序列。
容量固定訪問速度快
線性表的順序儲存結構在c#中最直接表現形式就是陣列。陣列是最基礎也是訪問速度最快的一種集合型別。在託管堆中建立陣列時,除了陣列元素,陣列物件所占用的記憶體塊還包括型別物件指標、同步索引等額外成員!陣列雖然有很多優點,但是它無法進行新增和刪除,也無法動態的更改集合的大小,如果要動態的改變陣列所占用的空間的大小,可以使用c#中的arraylist。動態陣列。
插入:通常將增加的內容加在順序表的最後乙個,但是如果要求按順序插入時則應該先查詢應該插入的位置
在將該位置以後的順序表的所有內容均向後移動,再將需要插入的內容插入相應位置。要注意的問題是:(1)順序表中資料區域有maxlen個儲存單元,所以在插入時先檢查順序表是否已滿,在表滿的情況下不能再做插入,否則產生溢位錯誤。
(2)檢驗插入位置的有效性,這裡 i 的有效範圍是:1<=i<=n+1,其中 n 為原表長。
(3)注意資料的移動方向,必須從原線性表最後乙個結點(an)起往後移動。順序表插入操作需移動表中一半資料元素,其時間複雜度為o(n)。
刪除:先查詢應該刪除內容的位置,在將該位置以後的順序表的所有內容均向前移動,需要刪除的內容就自動被刪除了請注意以下問題:(1)首先要檢查刪除位置的有效性,刪除第i個元素,i的取值為: 1<=i<=n。
(2)當表空時不能做刪除,因表空時 l->last的值為-1,條件(i<1 || i>l->last+1)也包括了對錶空的檢查。
(3)刪除 ai 之後,該資料則已不存在,如果需要,必須先取出 ai 後,再將其刪除。
順序儲存的優點:• 可以隨機訪問表中任意乙個元素;順序儲存的缺點:• 儲存位置可以用公式:b+(i-1)*d 計算;
• 節約儲存空間。
• 對順序表作插入、刪除時需要通過移動大量的資料元素,影響了執行效率。• 線性表預先分配空間時,必須按最大空間分配,儲存空間得不到充分的利用。
• 表的容量難以擴充(對有些高階語言而言)。
c#中的arraylist酒是動態地改變陣列大小的。arraylist又成為動態陣列,他的儲存空間可以被動態的改變,同時還有新增、刪除元素的功能。以下是模擬arraylist的部分核心**實現:
using system;namespace datastructure
public daparraylist(int capacity)
_items = new
object[capacity];
}public
virtual
int add(object
value)
public
void ensurecapacity(int min)
if (this._size == this._items.length)
if (index _size)
this._size--;
if (index
/// 裁減空間
///
public
virtual
void trimtosize()
///
/// 元素個數
///
public
virtual
int count
}public
virtual
object
this[int index]
return _items[index];
}set
_items[index] = value;}}
public
virtual
int capacity
setif (value>0)
this._items = destinationarray;
}else}}
}}}
資料結構筆記2 線性表之順序表
線性表 linear list 是由n n 0 個資料元素 結點 a1,a2,an組成的有限序列。容量固定訪問速度快線性表的順序儲存結構在c 中最直接表現形式就是陣列。陣列是最基礎也是訪問速度最快的一種集合型別。在託管堆中建立陣列時,除了陣列元素,陣列物件所占用的記憶體塊還包括型別物件指標 同步索引...
資料結構線性表之順序表
純手打順序表相關操作,包括順序表的建立 初始化 輸出 插入 刪除 銷毀等,僅供自己回顧使用,可能會有不對的或者不恰當的地方望大家指正,共同學習。如下 資料結構順序表 include include include define maxsize 100 using namespace std type...
資料結構 線性表之順序表
線性表是包含若干資料元素的乙個線性序列 記為 l a0,ai 1,ai,ai 1 an 1 l為表名,ai 0 i n 1 為資料元素 n為表長,n 0 時,線性表l為非空表,否則為空表。線性表l可用二元組形式描述 l d,r 即線性表l包含資料元素集合d和關係集合r d r 關係符在這裡稱為有序對...