生活随笔
收集整理的這篇文章主要介紹了
顺序表的原理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、順序表
1,順序表特點
線性表的邏輯順序與物理順序一致,數據元素之間的關系是以元素在計算機內“物理位置相鄰”來體現。對順序表中的所有表項,即可以進行順序的訪問,也可以隨機的訪問,也就是說,
既可以從表的第一個表項開始逐個訪問表項也可以按照表項的序號(下標)直接的訪問。無需為表示結點間的邏輯關系而增加額外的存儲空間,存儲利用率提高。可以方便的存儲表中的任一結點,存儲速度快。
缺點:
1)在表中插入新元素或刪除無用元素時,為了保持其他元素的相對次序不變,平均需要移動一半元素,運行效率低
2)由于順序表要求占用連續的空間,如果預先進性存儲分配,則當表長度變化較大時,難以確定合適的存儲空間帶大小
3)若按可能達到的最大的長度預先分配表的空間,則容易造成一部分空間長期的限制而得不到充分的利用
2、鏈表
鏈表是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:數據域和指針域
特點:
1)可以方便的進行擴充。
2)可以方便的刪除和插入。
3、順序表的線性存儲示意圖
假設線性表中有n個元素,每個元素占k個存儲單元,第一個元素的地址為Loc(a1),則第i個元素的地址Loc(ai):Loc(ai) = Loc(a1) + (i-1) * k; # 其中Loc(a1)稱為基地址。
4、順序表增刪改查原理
順序表的初始化就是把順序表 初始化為空的順序表;只需把順序表的長度length置為
0即可;
順序表的長度就是就順序表中的元素的個數,由于在插入和刪除操作中都有對數據表的長度進行修改,所以求表長只需返回length的值即可;
查找順序表中第i個元素的值(按序號查找),如果找到,將將該元素值賦給e。查找第i個元素的值時,首先要判斷查找的序號是否合法,如果合法,返回第i個元素對應的值。
在數據表的第i個位置插入元素,在順序表的第i個位置插入元素e首先將順序表第i個位置的元素依次向后移動一個位置,然后將元素e插入第i個位置,移動元素要從后往前移動元素,即:先移動最后一個元素,在移動倒數第二個元素,依次類推;插入元素之前要判斷插入的位置是否合法,順序表是否已滿,在插入元素之后要將表長L
->length
++;
刪除表中的第i個元素e,刪除數據表中的第i個元素,需要將表中第i個元素之后的元素依次向前移動一位,將前面的元素覆蓋掉。移動元素時要想將第i
+1個元素移動到第i個位置,在將第i
+2個元素移動i
+1的位置,直到將最后一個元素移動到它的前一個位置。進行刪除操作之前要判斷順序表是否為空,刪除元素之后,將表長L
->length
--;
查找數據元素e在表中的位置,可以從表頭開始一直遍歷表中元素。如果找到與要查找元素e相等的元素,則返回元素在表中的位置,數組下標從
0開始。則元素在表中對應的位置序號值應為對應數組下標加
1,沒有找到則返回
0。
頭插,即在表頭插入元素e,在表頭插入元素,需要將表中的元素依次后移一位,然后將要插入的元素e賦給數字的首元素,執行插入操作后將表長L
->length
++;需要注意的是移動元素要從順序表的最后一個元素開始移動,如果從第
1個元素開始移動,會使得第
1個元素的值覆蓋第
2個元素的值,然后把第二個元素后移則會使第
2個元素的值
(原來第
1個元素值
)覆蓋第
3個元素的值,依次類推,最后出插入元素外,其余元素值均為原順序表中第一個元素的值。
刪除順序表中的第一個元素,只要將順序表中的元素從第
2個開始,依次向前移動
1位,覆蓋原來順序表中元素對應位置的前一個值在刪除元素之前要判斷順序表是否為空,刪除順序表元素之后將順序表長度L
->length
--;
在順序表表尾插入元素e,L
->data
[L
->length
] = e
;將元素e的值賦給順序表中最后一個元素的下一個元素;尾插操作,需要判斷順序表是否已滿,尾插后將順序表長度L
->length
++;
刪除表尾元素,只需將順序表的長度減
1,類似于出棧操作,棧頂指針top –。
清空順序表就是將表中的元素刪除。刪除表中的元素只需將表的長度置為
0。
如果順序表的長度為
0,則順序表為空,返回
1,否則,返回
0;
依次打印順序表中的元素,如果順序表為空則輸出提示。
總結
以上是生活随笔為你收集整理的顺序表的原理的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。