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