資料結構與演算法in C C 1 SWAP

2021-07-28 12:27:34 字數 2516 閱讀 8557

交換是資料結構與演算法的基石,本節通過5個方法的實現來談談如何實現swap。

#define _crt_secure_no_warnings

#include

#include

#include

#include

using namespace std; //c和c++可以混在一起,相互相容

int swap_test1(int a, int b);

//1.傳值

int swap_test2(int

*p1, int

*p2);

//2.傳位址 使用指標交換兩int型別變數的值

//use pointer to exchange the value of two variables

#define swap_test3(a,b,t) (t=a,a=b,b=t)

//3.巨集函式

int swap_test4(int &a, int &b);

//4.傳引用

(standard template library)

//template void swap_test5(t& a, t&b);

int main(void)

printf("after swap a:%d,b:%d\n\n", a, b);

cout << "using address pass"

<< endl;

printf("before swap a:%d,b:%d\n", a, b);

if (swap_test2(&a, &b) < 0)

printf("after swap a:%d,b:%d\n\n", a, b);

cout << "using macro function"

<< endl;

printf("before swap a:%d,b:%d\n", a, b);

if (swap_test3(a,b,t) < 0)

printf("after swap a:%d,b:%d\n\n", a, b);

cout << "using alias"

<< endl;

printf("before swap a:%d,b:%d\n", a, b);

if (swap_test4(a, b) < 0)

printf("after swap a:%d,b:%d\n\n", a, b);

cout << "using std::swap which is templatevoid swap(t& a,t& b)"

<< endl;

printf("before swap a:%d,b:%d\n", a, b);

std::swap(a, b);

printf("after swap a:%d,b:%d\n\n", a, b);

return0;}

int swap_test1(int a, int b)

int swap_test2(int

*p1, int

*p2)

p1_temp = p1;

p2_temp = p2;

printf("in function,before swap a:%d,b:%d\n",*p1,*p2);

*p1_temp += *p2_temp;

*p2_temp = *p1_temp - *p2_temp;

*p1_temp = *p1_temp - *p2_temp;

printf("in function,after swap a:%d,b:%d\n", *p1, *p2);

} int swap_test4(int &a, int &b)

//講解:交換---演算法的起點

/* 我們以c和c++為例子看看交換演算法有幾種表示方法:

1. void swap(int a, int b); 錯誤!!!值拷貝的方法無法交換變數的值..思考:請用記憶體四區圖分析一下為什麼值拷貝無法交換變數的值?

2. void swap (int

*a, int

*b); 指標是比較常用的函式引數

3. 巨集函式方法

————————————————————————

以上是c語言專用的方法

————————————————————————

指標容易出錯,於是c++中出現的一種新的方法,傳引用(引用就是別名).

4. void swap (int &a, int &b);

//我們發現,以上4種演算法都有乙個問題:只能交換兩個int型別數的值。

//因為c和c++是靜態語言,所有變數都要有資料型別,這使的我們定義的介面沒有普適性。

//對int資料型別的變數我們要編寫乙個介面。對float型別的變數我們又要編寫乙個介面,這樣開發效率太低了。

//那麼我們有什麼好方法嗎?那就是使用c++中的stl標準模板庫

5. 呼叫stl模板庫

std::swap(a,b);

*/

資料結構與演算法(1)

演算法 資料結構 一 演算法 1.演算法的幾個特徵是什麼。2.演算法複雜性的定義。大o 小o分別表示的含義。3.遞迴演算法的定義 遞迴演算法的兩要素。4.分治演算法的思想,經典的分治演算法 全排列 二分搜尋 歸併排序 快速排序 線性時間選擇 最接近點對問題 5.動態規劃演算法解題框架,動態規劃演算法...

資料結構與演算法(1)

1 線性表 2 棧 3 佇列 4 字串 補充 遞迴 1 樹與二叉樹 2 圖 1 查詢 2 排序 編寫相關演算法 資料結構 入門問題 1.為什麼學習資料結構?1 高階程式設計的理論指導 2 提公升編碼能力 3 面試中經常被問及,看發展潛力 2.有哪些資料結構?2.11線性結構 線性表 棧 佇列 陣列 ...

資料結構與演算法 1

cpu 處理器central process unit gpu 圖形處理器graphics processing unit,又稱顯示核心 視覺處理器 顯示晶元或繪圖晶元,是一種專門在個人電腦 工作站 遊戲機和一些移動裝置 如平板電腦 智慧型手機等 上執行繪圖運算工作的微處理器。其用途是將計算機系統所...