線性表與鍊錶的三個常用操作 最值,逆置,歸併

2021-10-24 08:36:47 字數 2204 閱讀 7574

思想:陣列儲存線性表l,形成順序表,標記當前的資料元素,用2個變數表示min,max最小值和最大值,並把他們初始化第乙個資料元素,對於從前往後遍歷整個線性表

順序表----------遍歷整個順序表與n同階無窮大,時間複雜度為o(n)

int min = l[0]

;int max = l[0]

;

1.首先是宣告2個變數,儲存當前最大值和最小值,並把他們初始化為線性表中第乙個元素l[0]

2.使用for迴圈遍歷整個陣列

if 語句-- 當前遍歷的陣列元素與當前儲存的最大值和最小值比較,比當前儲存的最小值小,或比當前儲存的最大值大,就修改當前儲存的

3.一直迴圈直到遍歷整個陣列

鍊錶-------遍歷整個鍊錶

思想:將最小值初始化為第乙個節點的資料元素,for迴圈迴圈鍊錶,依次指向下乙個結點。第乙個資料元素節點到最後乙個,資料元素進行編寫

思想:申請乙個額外的輔助空間與原來的陣列大小相同。從尾到頭依次遍歷原來的陣列複製到新陣列中 ----空間複雜度o(n)

新的方法:空間複雜度為o(1)的演算法,時間複雜度為o(n)

順序表:

思想:建立2個標記i,j分別表示第乙個和最後乙個元素位置,兌換資料元素,移動標記直到i=j,對換完成,結束操作,逆置完成

結束條件: 順序表中有 奇數個元素 i>j

偶數個元素 i=j

但是在**中都可以用if語句中---i

單鏈表:

思想:單鏈表中有指向2個指標,乙個是指向頭結點的頭指標p和指向最後乙個資料結點尾指標r,將第乙個資料結點移動到r所指資料元素結點的後面。不斷重複就可以得到逆置的鍊錶

1.r 沒有成為第乙個資料元素結點,開始迴圈

2.前2條語句是將第乙個資料結點拿出去並儲存下來,後2條語句是將儲存下來的第乙個資料元素結點插入到r所指資料元素結點的後面

有迴圈的過程,所以時間複雜度為o(n)

理解性記憶:指標賦值過程可以形象地理解為是乙個逆時針的圈

歸併2個有序的線性表,並且歸併之後l依然有序

順序表

思想:在進行合併之前,需要先申請乙個額外空間,儲存合併之後的陣列,大小size1+size2

借助2個標記,分別是陣列1和陣列2的i,j。從起始位置開始依次比較2個陣列的資料元素,將較小的放進新的陣列中

1.初始化(i,j陣列1和陣列2 k是新的陣列的標記)

2.迴圈對比,以及移動標記

3.將剩下資料元素 依次放到新的陣列中 ----時間複雜度o(n)

注意:第三步剩下的資料元素,我們並不知道是哪個陣列的,所以還的使用2個while迴圈來進行判斷

時間複雜度為o(n)這裡是2個順序表n+n的和

單鏈表

思想:將2個線性表儲存到單鏈表中,有2個頭結點

迴圈比較移動指標的過程,當前2個指標所指結點,哪個資料元素小,就指到新的鍊錶中。所有的資料結點都會到新的鍊錶中,剩下的直接轉移—修改指標來完成轉移

**解釋:迴圈語句來代表指標移動,和元素對比。迴圈體中是找出更小的元素結點,將他移動到新的鍊錶中

最後2個if語句判斷哪個是剩下的,將他們的指標修改

最後釋放沒有用的頭結點p,q的空間

資料結構 線性表中線性表與鍊錶的區別

使用到的線性表需要頻繁查詢時,使用線性表結構 頻繁插入和刪除是,採用單鏈表結構 線性表的元素位址是連續的。煉表裡的位址是不連續的,是通過指標聯絡起來的。ps 線性表是邏輯結構,各個元素儲存的先後位置反映邏輯上的線性關係。單鏈表是線性結構,是靠指標來反映這種關係的。2 順序表,使用陣列實現,是一組連續...

線性表的基本操作實現 基於鍊錶

用c 鍊錶方式實現了線性表的一些基本操作,包括插入元素,刪除元素,反轉線性表等.include include define error null typedef int elementtype typedef struct lnode ptrtolnode struct lnode typedef...

線性表的定義與操作 鏈式表

線性表的定義與操作 鏈式表 定義狀態標記 define ok 1 define error 0 typedef int status 定義程式返回狀態值 typedef int elemtype 定義元素型別 定義乙個表結點 typedef struct lnodenode,list 初始化順序線性...