交換是資料結構與演算法的基石,本節通過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,又稱顯示核心 視覺處理器 顯示晶元或繪圖晶元,是一種專門在個人電腦 工作站 遊戲機和一些移動裝置 如平板電腦 智慧型手機等 上執行繪圖運算工作的微處理器。其用途是將計算機系統所...