(1)線性表的定義
線性表是由n(n≧)個相同型別資料元素(結點)a1,a2,……an組成的有限序列;
(a1,a2,……,an),其中:
n:資料元素的個數,也稱表的長度
空表:n=0,記為();
舉例:由26個英文本母構成的表(a,b,c,……,z)是乙個線性表;
由全體職工的基本工資構成的表是乙個線性表;
我們常玩的撲克牌,其資料元素—牌,是由牌點、花色組成的,是復合資料型別,這種型別的線性表稱為復合線性表
線性表的特徵:
1.在非空的線性表,有且僅有乙個開始結點a1,它沒有直接前趨,而僅有乙個直接後繼a2;
2.有且僅有乙個終端結點an,它沒有直接後繼,而僅有乙個直接前趨an-1;
3.其餘的內部結點ai(2≦i≦n-1)都有且僅有乙個直接前趨an-1,和乙個直接後繼an+1。
線性表的基本運算
1.求表長–求線性表中元素的個數。
2.遍歷–從左到右(或從右到左)掃瞄(或讀取)表中的各元素。
3.按編號查詢–找出表中第個元素。
4.按特徵查詢–按某個特定值查詢線性表。
5.插入–在第i個位置上(即原第個元素前)插入一新元素。
6.刪除–刪除原表中的第1個元素。
7.排序–按元素某特徵值的遞增(或遞減)排序,重排表中各元素。
(2)順序線性表
把線性表的結點按邏輯順序依次存放在一組位址連續的儲存單元裡。用這種方法儲存的線性表簡稱順序表。
順序表插入和刪除:
1.插入:插入新結點,之後的結點從最後乙個結點開始移。
2.刪除:刪除結點,之後的結點前移。
(3)線性鍊錶
用一組任意的儲存單元來依次存放線性表的結點,這組儲存單元即可以是連續的,也可以是不連續的,甚至是零散分布在記憶體中的任意位置上的, 因此,鍊錶中結點的邏輯次序和物理次序不一定相同。為了能正確表示結點間的邏輯關係,在儲存每個結點值的同時,還必須儲存指示其後繼結點的位址。data域是資料域,用來存放元素的數值資料。next是指標域(亦稱鏈域),用來存放元素的直接後繼的位址(或位置)。不需要事先估計儲存空間大小。
單鏈表的結構:
單鏈表中構成鍊錶的結點只有乙個指向直接後繼結點的指標域。其結構特點:邏輯上相鄰的資料元素在物理上不一定相鄰。
單鏈表的插入和刪除:
1.查詢:只能從鍊錶的頭指標出發,順鏈域next逐個結點往下搜尋,直到搜尋到第i個結點為止。因此,鍊錶不是隨機訪問結構。
2.插入:先找到表的第i-1的儲存位置,然後插入。新結點先連後繼,再連前驅。
3.刪除:首先找到ai-1的儲存位置p。然後令p–>next指向ai的直接後繼結點,即把ai從鏈上摘下。最後釋放結點ai的空間
資料結構(線性表)
1.試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert l,i,b 並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。status insert linklist l,int i,int b 在無頭結點鍊錶l的第 i個元素之前插入元素 belse insert 2.已知線性表中...
資料結構 線性表
參考 一 線性表 順序表 單鏈表 迴圈鍊錶 雙鏈表 順序表 1.表的初始化 void initlist seqlist l 2.求表長 int listlength seqlist l 3.取表中第i個結點 datatype getnode l,i 4.查詢值為x的結點 5.插入 具體演算法描述 v...
資料結構 線性表
線性表是最基礎的一種資料結構,這樣的資料物件包含的資料元素具有一對一的前驅後繼關係。按其邏輯儲存方式的不同可分為兩類線性表 順序表和鏈式表。其中鏈式表又可分為線性鍊錶 迴圈鍊錶和雙向鍊錶。下面分別介紹下這幾種線性表的資料結構 1.順序表 typedef struct sqlist 插入演算法 i到n...