資料結構 線性表

2021-08-10 02:35:30 字數 2363 閱讀 8992

線性表

線性表的基本操作

1、建立乙個新的線性表

2、求線性表的長度

3、檢索線性表中第i個資料元素(1 <=i<=n)

7、刪除線性表中第i個資料元素

8、對線性表中的資料元素按照某乙個資料項的值的大小做公升序或者降序排序

9、銷毀乙個線性表

10、複製乙個線性表

11、按照一定的原則,將兩個或者兩個以上的線性表合併成乙個線性表

12、按照一定的原則,將乙個線性表分解為兩個或兩個以上的線性表

若假設每個資料元素占用k個儲存單元,並且已知第乙個元素的儲存位置loc(a1)則有

loc(a1) = loc(a1) + (i - 1)*k (公式)

在c語言中

#define  maxsize  100 

elemtype   a[maxsize]; // 預先分配給線性表的空間大小

int n; // 表的長度

(1)確定元素item在長度為n的順序表a中的位置

(2)在長度為n的順序表a的第i個位置上插入乙個新的資料元素item 

正常情況下需要做的工作:

1.將第i個元素至第n個元素依次後移乙個位置

2.將被插入元素插入表的第i個位置

3.修改表的長度(表長增1)n++ 

需要考慮的異常情況:

1.是否表滿? n = maxsize ?

2.插入位置是否合適?(正常位置1<=i<=n+1)

約定:若插入成功,演算法返回1 否則,演算法返回-1

演算法時間複雜度分析:通常採用元素移動次數的平均值作為衡量插入和刪除演算法時間效率的主要指標

(3)刪除長度為n的順序表a的第i個資料元素

把線性表的第i個資料元素從線性表中去掉,使得長度為n的線性表轉換成長度為n-1的線性表

正常刪除位置1

正常情況下需要做的工作

1.將第i+1個元素至n個元素依次前移乙個位置

2.修改表的長度(表長減1)(n--)

需要考慮異常情況:

1.是否空表?n = 0?

2.刪除位置是否合適?(正常位置1<=i<=m)

順序儲存結構的特點

1.優點

1.構造原理簡單、直觀,易理解

2.元素的儲存位址可以通過乙個簡單的解析式計算出來。是一種隨機儲存結構,儲存速度快。

3.由於只需存放資料元素本身的資訊,而無其他空間開銷,相對鏈式儲存結構而言,儲存空間開銷小(僅此而已)

2.缺點

1.儲存分配需要事先進行

2.需要一片位址連續的儲存空間

3.基本操作(插入、刪除)時間效率較低

鍊錶typedef struct node lnode, *linklist;

遞迴演算法的時間效率通常比非遞迴演算法要低

鍊錶的基本操作

1.求線性表的長度演算法

非遞迴演算法

int length(linklist list) 

return n;

}遞迴演算法

int length(linklist list) 

else 

}2.建立乙個線性表

// 申請乙個鏈結點的控制項

p = (linklist)malloc(sizeof(lnode));

// 釋放乙個鏈結點的空間

free(p);

linklist create(int n)

return list;

}3.在非空線性表的第乙個結點前插入乙個資料資訊為item的新結點

void insertlink1(linklist &list, elemtype item) 

void insertlink2(linklist &list, linklist q, elemtype item) 

else

}void insertlist3 (linklist list, int i , elemtype item) 

p = (linklist)malloc(sizeof(lnode));

p ->data = item;

p ->link = q ->link;

q ->link = p;

}6.從非空線性鍊錶中刪除鏈結點q(q為指向被刪除鏈結點的指標)

void deletelink1(linklist &list, linklist r, linklist q) 

從非空線性鍊錶中刪除q指向的鏈結點

void deletelink2(linklist &list, linklist q) 

else }}

7.刪除線性鍊錶中滿足某個條件的鏈結點

8.線性鍊錶的逆轉

9.將兩個線性鍊錶合併為乙個線性鍊錶

10.檢索線性鍊錶中的第i個鏈結點

資料結構(線性表)

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...