資料結構之順序儲存

2021-09-25 15:27:40 字數 2052 閱讀 1370

1、線性表基本概念:由同型別資料元素構成有序序列的線性結構0

123…

ii+1

…k-1k…

7584

5780

8292

8690

9769

87

//插入程式片段

for(j=n-1;j>=i;j--)

a[j+1]=a[j];//右移,空出a[j]

//注意這裡右移是初是從最後一項開始移動

a[i]=x;//插入x

n++;//表長增1

②刪除

(指定位置)當前表長為n=k,刪除a[i]。需要從下標i+1開始到k-1全部左移一位,左移後原i位置上的92被覆蓋,表長變為n=k-1。01

23…i

i+1…

k-175

8457

8082

9286

9097

for(j=i;j③指定位置插/刪效率分析

t插入=n-i

t刪除=n-1-i

int sqsearch(int a,int x,int n)

⑤二分查詢

核心思想:計算中值位置,縮小查詢區間

查詢步驟:left表示起點,right表示終點,mid表示中值點,陣列a存放元素,x位待查詢元素

計算中值點

mid=(left+right)/2

若x=a[mid],查詢成功,返回mid,結束;

若xa[mid],則往右縮小查詢區間,重複上述過程

二分查詢演算法

(前提:順序儲存、有序表)

//普通思想演算法

int binary_search(int a,int n,int x)

; int b[n],i,j=0,k=n;

for(i=0;i執行結果

12,34,56,78,89,11,22,6,8,2

示例2

設計乙個函式,將兩個順序儲存的嚴格遞增的有序表合成乙個嚴格遞增的有序表表a0

1234

5141724

4353

76表b01

2345

6789

101158

1521

2943

5264

7081

87199表c0

1234

56…17

581415

172124…

199演算法思想:先從表a,b兩個表的第乙個元素進行比較,當位置下標為0時,a[0]>b[0],此時將b[0]元素存入c[0]。繼續比較a[0]與b[1],此時a[0]>b[1],將b[1]存入c[1]中。繼續比較a[0]與b[2],此時b[2]>a[0],將a[0]存入c[2]中。繼續比較a[1]與b[2]…以此類推,直到其中乙個陣列比較完。

int merge(int a,int m,int b,int n,int c)

//引數m,n分別是陣列a、b的長度

;int length;

length=sizeof(a)/sizeof(a[0]);//陣列佔記憶體總空間,除以單個元素佔記憶體的大小

printf("%d",length);//輸出結果4

注意,若用此方法通過傳遞陣列名引數到子函式中,來獲得陣列長度是不可行的

int getlength(int a)
原因:a是函式引數,到了函式中,a是乙個指標(位址,系統在函式中執行時,是不知道a所表示的位址有多大的資料儲存空間,這裡只是告訴函式:這是乙個資料儲存空間的首位址),在函式中,sizeof(a)的結果是指標變數a佔記憶體的大小,一般在32位機上是4個位元組,a[0]也是4個位元組,所以結果永遠是1。

②求取字串的長度(strlen)

資料結構之順序儲存

本篇主要講資料結構中的順序結構,具體 如下 望讀者自行分析 很容易讀懂 include includeusing namespace std char pause typedef int t templateclass list templatelist list int m templatelis...

資料結構之線性結構 棧 順序儲存

棧是一種受限的線性表,它規定只能夠在表的尾部進行插入和刪除,我們把允許插入和刪除元素的一端稱為棧頂,而另一段稱為棧底,沒有任何元素的元素棧稱為空棧。棧中的元素進出的規則為先入後出,即先進入棧的元素後出棧而後進入棧的元素先出棧。在對棧棧中的元素進行操作時只能夠操作棧頂的元素。棧中儲存元素的三種狀態 當...

資料結構之堆疊的順序儲存

堆疊擁有兩種儲存方式 順序儲存和鏈式儲存。本文介紹堆疊了順序儲存方式。堆疊簡稱為棧,是線性表的一種特殊表現形式。堆疊只能夠在表的一端進行插入 刪除操作,允許操作的一端稱為棧頂,不允許操作的一端稱為棧底。棧的乙個一定要記住的特點是 先進後出!下圖表示了堆疊的順序儲存方式。假設用乙個長度為5的陣列a 5...