練習 資料結構和演算法複習題

2021-08-07 11:24:43 字數 2358 閱讀 4729

複習資料結構,寫一些簡單的題目複習一下。

stack

#include #include using namespace std; 

int countmatch(string s) }}

return n;

}int main()

/*輸出:

5*/

#include#includeusing namespace std;  

int match(string longstr,string shortstr)

if(li == longstr.end() || *si != *li)

goto skip;

}skip:

li = ++ti;

continue;

goon:

continue;

}return count;

} int main()

題目:a=10,b=15,將a / b的值互換。

通常我們的做法是(尤其是在學習階段):定義乙個新的變數,借助它完成交換。**如下:

int a,b;

a=10; b=15;

int t;

t=a; a=b; b=t;

這種演算法易於理解,特別適合幫助初學者了解電腦程式的特點,是賦值語句的經典應用。在實際軟體開發當中,此演算法簡單明瞭,不會產生歧義,便於程式設計師之間的交流,一般情況下碰到交換變數值的問題,都應採用此演算法(以下稱為標準演算法)。

上面的演算法最大的缺點就是需要借助乙個臨時變數。那麼不借助臨時變數可以實現交換嗎?答案是肯定的!

1) 算術運算

簡單來說,就是通過普通的+和-運算來實現。**如下:

int a,b;

a=10;b=12;

a=b-a; //a=2;b=12

b=b-a; //a=2;b=10

a=b+a; //a=10;b=10

通過以上運算,a和b中的值就進行了交換。表面上看起來很簡單,但是不容易想到,尤其是在習慣標準演算法之後。

它的原理是:把a、b看做數軸上的點,圍繞兩點間的距離來進行計算。

具體過程:第一句「a=b-a」求出ab兩點的距離,並且將其儲存在a中;第二句「b=b-a」求出a到原點的距離(b到原點的距離與ab兩點距離之差),並且將其儲存在b中;第三句「a=b+a」求出b到原點的距離(a到原點距離與ab兩點距離之和),並且將其儲存在a中。完成交換。

此演算法與標準演算法相比,多了三個計算的過程,但是沒有借助臨時變數。(以下稱為算術演算法)

該演算法還可以這樣做:

int a,b;

a=10;b=12;

a=a+b=22;

b=a-b=10;

a=a-b=12;

兩個減操作乙個加操作,執行的先後順序不一樣,其原理也稍微有些區別,但根本原理是一樣滴。

3) 位運算

通過異或運算也能實現變數的交換,這也許是最為神奇的,請看以下**:

int a=10,b=12; //a=1010^b=1100;

a=a^b; //a=0110^b=1100;

b=a^b; //a=0110^b=1010;

a=a^b; //a=1100=12;b=1010;

此演算法能夠實現是由異或運算的特點決定的,通過異或運算能夠使資料中的某些位翻轉,其他位不變。這就意味著任意乙個數與任意乙個給定的值連續異或兩次,值不變。

即:a^b^b=a。將a=a^b代入b=a^b則得b=a^b^b=a;同理可以得到a=b^a^a=b;輕鬆完成交換。

以上三個演算法均實現了不借助其他變數來完成兩個變數值的交換,相比較而言算術演算法和位演算法計算量相當,位址演算法中計算較複雜,卻可以很輕鬆的實現大型別(比如自定義的類或結構)的交換,而前兩種只能進行整形資料的交換(理論上過載「^」運算子,也可以實現任意結構的交換)

4. 台階問題

假設a上台階,一次可以跨1層,2層或3層,問a上50層台階,有多少種走法?

假設a上台階,一次可以跨1層,2層,3層.. 或m層,問a上n層台階,有多少種走法?

其中,m和n都是正整數,並且 m <= n, m <= 10, n <= 50

請程式設計解決這個問題,並詳細說明解題思路。

解:典型的遞迴問題。考慮第一步,有三種可能,走一步,走兩步,走三步。立馬就有乙個遞迴式,f(n) = f(n - 1) + f(n - 2) + f(n - 3)。終結點是f(1)  f(2) f(3)。這樣有很大重複,可以用乙個備忘錄記下來這些值。

#include

using namespace std;

int mem[1000] = {};

int f(int n)

int main()

資料結構複習題綱

最近把近期的部落格和生活中的一些瑣事進行了整理和歸納,從現在起,開始著手準備資料結構的複習了。同時做一些筆記與大家共同分享 進步!感謝大家的支援!記得點讚啦!第二章 鍊錶 第三章 棧和佇列 對特定問題求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示乙個或多個操作 此外,乙個演算法還具有下列...

資料結構複習題(二)

一 選擇題 24分 1 下面關於線性表的敘述錯誤的是 a 線性表採用順序儲存必須占用一片連續的儲存空間 b 線性表採用鏈式儲存不必占用一片連續的儲存空間 c 線性表採用鏈式儲存便於插入和刪除操作的實現 d 線性表採用順序儲存便於插入和刪除操作的實現 2 設哈夫曼樹中的葉子結點總數為m,若用二叉鍊錶作...

資料結構複習題(五)

一 選擇題 20分 1 資料的最小單位是 a 資料項 b 資料型別 c 資料元素 d 資料變數 2 設一組初始記錄關鍵字序列為 50,40,95,20,15,70,60,45 則以增量d 4的一趟希爾排序結束後前4條記錄關鍵字為 a 40,50,20,95 b 15,40,60,20 c 15,20...