王道计算机考研 数据结构 课后编程习题代码(绪论、线性表)
生活随笔
收集整理的這篇文章主要介紹了
王道计算机考研 数据结构 课后编程习题代码(绪论、线性表)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
第二章、線性表
2.2.3
1.
- 題意 :從順序表中刪除具有最小值的元素(假設(shè)唯一)并由函數(shù)返回被刪函數(shù)的值,空出的位置由最后一個(gè)元素填補(bǔ),若順序表為空,則顯示出錯(cuò)信息并退出運(yùn)行。
- 思路 :搜索整個(gè)順序表,查找最小值元素并記住其位置,搜索結(jié)束后用最后一個(gè)元素填補(bǔ)空出的原最小值元素的位置。
2.
- 題意 :設(shè)計(jì)一個(gè)高效算法,將順序表L的所有元素逆置,要求算法的空間復(fù)雜度為O(1)O(1)O(1)。
- 思路 :掃描順序表L的前半部分元素,對(duì)于元素L.data[i](0<=i<L.length/2)L.data[i](0<=i<L.length/2)L.data[i](0<=i<L.length/2),將其與后半部分的對(duì)應(yīng)元素L.data[L.length?i?1]L.data[L.length - i - 1]L.data[L.length?i?1]進(jìn)行交換。
3.
- 題意 :對(duì)長度為n的順序表L,編寫一個(gè)時(shí)間復(fù)雜度為O(n)O(n)O(n),空間復(fù)雜度為O(1)O(1)O(1)的算法,該算法刪除線性表中所有值為x的數(shù)據(jù)元素。
- 解法一 :用k記錄順序表L中不等于x的元素個(gè)數(shù),并將不等于x的元素向前移動(dòng)k個(gè)位置,最后修改L的長度。
- 解法二 :用k記錄順序表L中等于x的元素個(gè)數(shù),并將不等于x的元素往前移k個(gè)位置,最后修改L的長度。
4.
- 題意 :從有序順序表中刪除其值在給定s與t之間(要求s<t)的所有元素,若s或t不合理或順序表為空,則顯示出錯(cuò)信息并退出運(yùn)行。
- 思路 :本題與上一題存在區(qū)別。因?yàn)槭怯行虮?#xff0c;所以刪除的元素必然是相連的整體。先尋找值大于等于s的第一個(gè)元素(第一個(gè)刪除的元素),然后尋找值大于t的第一個(gè)元素(最后一個(gè)刪除的元素的下一個(gè)元素),要將這段元素刪除,只需直接將后面的元素前移。
5.
- 題意 :從順序表中刪除其值在給定值s與t之間(包含s和t,要求s<t)的所有元素,若s或t不合理或順序表為空…
- 思路 :由于這樣每個(gè)不在s到t之間的元素僅移動(dòng)一次,因此算法效率高。
6.
- 題意 :從有序順序表中刪除所有值重復(fù)的元素,使表中所有元素的值均不同。
- 思路 :注意是有序順序表,值相同的元素一定在連續(xù)的位置上,用類似于直接插入排序的思想,初始時(shí)將第一個(gè)元素視為非重復(fù)的有序表。之后依次判斷后面的元素是否與前面非重復(fù)有序表的最后一個(gè)元素相同,若相同,則繼續(xù)向后判斷,若不同,則插入前面的非重復(fù)有序表的最后,直至判斷到表尾為止。
7.
- 題意 :將兩個(gè)有序順序表合并為一個(gè)新的有序順序表,并由函數(shù)返回結(jié)果順序表。
- 思路 :首先,按順序不斷取下兩個(gè)順序表表頭較小的結(jié)點(diǎn)存入新的順序表中,然后,看哪個(gè)表還有剩余,將剩下的部分加到新的順序表后面。
8.
- 題意 :已知在一維數(shù)組A[m+n]A[m+n]A[m+n]中依次存放兩個(gè)線性表(a1,a2,...,am)(a_1,a_2,...,a_m)(a1?,a2?,...,am?)和(b1,b2,...,bn)(b_1,b_2,...,b_n)(b1?,b2?,...,bn?)。試編寫一個(gè)函數(shù),將數(shù)組中兩個(gè)順序表的位置互換,即將(b1,b2,...,bn)(b_1,b_2,...,b_n)(b1?,b2?,...,bn?)放在(a1,a2,...,am)(a_1,a_2,...,a_m)(a1?,a2?,...,am?)的前面。
- 思路 :先將數(shù)組A[n+m]A[n+m]A[n+m]中的全部元素(a1,a2,...,am,b1,b2,...,bn)(a_1,a_2,...,a_m,b_1,b_2,...,b_n)(a1?,a2?,...,am?,b1?,b2?,...,bn?)原地逆置為(bn,..,b1,am,...,a1)(b_n,..,b_1,a_m,...,a_1)(bn?,..,b1?,am?,...,a1?),再對(duì)前n個(gè)元素和后m個(gè)元素分別使用逆置算法,即可實(shí)現(xiàn)順序表的位置互換。
9.
- 題意 :線性表(a1,a2,...,an)(a_1,a_2,...,a_n)(a1?,a2?,...,an?)中的元素遞增有序且按順序存儲(chǔ)于計(jì)算機(jī)內(nèi)。要求設(shè)計(jì)一個(gè)算法,完成用最少時(shí)間在表中查找數(shù)值為x的元素,若找到,則將其與后繼元素位置相交換,若找不到,則將其插入表中并使表中元素仍遞增有序。
- 思路 :順序存儲(chǔ)的線性表遞增有序,可以順序查找,也可以折半查找。題目要求”用最少的時(shí)間在表中查找值為x的元素“,這里應(yīng)該使用折半查找法。
10.
- 2010統(tǒng)考真題
- 題意 :設(shè)將n(n>1)n(n>1)n(n>1)個(gè)整數(shù)存放到一維數(shù)組R中。設(shè)計(jì)一個(gè)在時(shí)間和空間兩方面都盡可能高效的算法。將R中保存的序列循環(huán)左移p(0<p<n)p(0<p<n)p(0<p<n)個(gè)位置,即將R中的數(shù)據(jù)由(X0,X1,...,Xn?1)(X_0,X_1,...,X_{n-1})(X0?,X1?,...,Xn?1?)變換為(Xp,Xp+1,...,Xn?1,X0,X1,...,Xp?1)(X_p,X_{p+1},...,X_{n-1},X_0,X_1,...,X_{p-1})(Xp?,Xp+1?,...,Xn?1?,X0?,X1?,...,Xp?1?)。要求:
- 算法的基本設(shè)計(jì)思想 :可將這個(gè)問題視為把數(shù)組ab轉(zhuǎn)換成數(shù)組ba(a代表數(shù)組的前p個(gè)元素,b代表數(shù)組中余下的n-p個(gè)元素),先將a逆置得到a?1ba^{-1}ba?1b,然后將b逆置得到a?1b?1a^{-1}b^{-1}a?1b?1,最后將整個(gè)逆置得到(a?1b?1)?1=ba(a^{-1}b^{-1})^{-1}=ba(a?1b?1)?1=ba。設(shè)Reverse函數(shù)執(zhí)行將數(shù)組元素逆置的操作,且兩個(gè)參數(shù)分別表示數(shù)組中待轉(zhuǎn)換元素的始末位置。
- 使用C語言描述算法如下 :
- 上述算法中三個(gè)Reverse函數(shù)的時(shí)間復(fù)雜度分別為O(p/2),O((n?p)/2),O(n/2)O(p/2),O((n-p)/2),O(n/2)O(p/2),O((n?p)/2),O(n/2),故所設(shè)計(jì)的算法的時(shí)間復(fù)雜度為O(n)O(n)O(n),空間復(fù)雜度為O(1)O(1)O(1)
11.
- 2011統(tǒng)考真題
- 題意 :一個(gè)長度為L(L>=1)(L>=1)(L>=1)的升序序列S,處在第[L/2][L/2][L/2]個(gè)位置的數(shù)稱為S的中位數(shù)。例如,若序列S1=(11,13,15,17,19)S_1=(11,13,15,17,19)S1?=(11,13,15,17,19),則S1S_1S1?的中位數(shù)是15,兩個(gè)序列的中位數(shù)是含它們所有元素的升序序列的中位數(shù)。現(xiàn)在有兩個(gè)等長升序序列A和B,試設(shè)計(jì)一個(gè)在時(shí)間和空間兩方面都盡可能高效的算法,找出兩個(gè)序列A和B的中位數(shù)。要求:
12.
- 2013統(tǒng)考真題
- 題意 :已知一個(gè)整數(shù)序列A=(a0,a1,...,an?1)A=(a_0,a_1,...,a_{n-1})A=(a0?,a1?,...,an?1?),其中0<=an<n(0<=i<n)0<=a_n<n(0<=i<n)0<=an?<n(0<=i<n)。若存在ap1=ap2==...=apm=xa_{p1}=a_{p2}==...=a_{pm}=xap1?=ap2?==...=apm?=x且m>n/2(0,=pk<n,1<=k<=m)(0,=p_k<n,1<=k<=m)(0,=pk?<n,1<=k<=m),則稱x為A的主元素。例如…。假設(shè)A中的n個(gè)元素保存在一個(gè)一維數(shù)組中,請(qǐng)?jiān)O(shè)計(jì)一個(gè)盡可能高效的算法,找出A的主嚴(yán)肅,若存在則輸出,否則輸出-1。要求:
13.
- 2018統(tǒng)考真題
- 題意 :給定一個(gè)含n(n>=1)個(gè)整數(shù)的數(shù)組,請(qǐng)?jiān)O(shè)計(jì)一個(gè)在時(shí)間上盡可能高效的算法,找出數(shù)組中未出現(xiàn)的最小正整數(shù)。要求 :
14.
- 2020統(tǒng)考真題
- 題意 :定義三元組(a,b,c)(a,b,c)(a,b,c)(a,b,c均為正數(shù))的距離D=∣a?b∣+∣b?c∣+∣c?a∣D=|a-b|+|b-c|+|c-a|D=∣a?b∣+∣b?c∣+∣c?a∣。給定三個(gè)非空整數(shù)集合S1,S2,S3S_1,S_2,S_3S1?,S2?,S3?,按升序分別存儲(chǔ)在3個(gè)數(shù)組中,請(qǐng)?jiān)O(shè)計(jì)一個(gè)盡可能高效的算法,計(jì)算并輸出所有可能的三元組(a,b,c)(a屬于S1,b屬于S2,c屬于S3)(a,b,c)(a屬于S_1,b屬于S_2,c屬于S_3)(a,b,c)(a屬于S1?,b屬于S2?,c屬于S3?)中的最小距離。要求 :
總結(jié)
以上是生活随笔為你收集整理的王道计算机考研 数据结构 课后编程习题代码(绪论、线性表)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AcWing算法提高课 Level-3
- 下一篇: AcWing算法基础课 Level-2