ios面試資料結構與演算法

2021-08-14 15:07:27 字數 2242 閱讀 9024

1、不用中間變數,變換a和b的值

// 1.中間變數

void swap(int a, int b)

// 2.加法

void swap(int a, int b)

// 3.異或(相同為0,不同為1. 可以理解為不進製加法)

void swap(int a, int b)

2、求最大公約數

/** 1.直接遍曆法 */

int maxcommondivisor(int a, int b)

}return max;

}/** 2.輾轉相除法 */

int maxcommondivisor(int a, int b)

return b;

}// 擴充套件:最小公倍數 = (a * b)/最大公約數

3、模擬棧操作

/**

* 棧是一種資料結構,特點:先進後出

* 練習:使用全域性變數模擬棧的操作

*/static int data[1024];//棧最多能儲存1024個資料

static int count = 0;//目前已經放了多少個數(相當於棧頂位置)

//資料入棧 push

void push(int x)

//資料出棧 pop

int pop()

//檢視棧頂元素 top

int top()

//查詢棧滿 full

bool full()

return 0;

}//查詢棧空 empty

bool empty()

return 0;

}int main()

//出棧

while(!empty())

printf("\n");

return 0;

}

4、排序演算法

選擇排序、氣泡排序、插入排序三種排序演算法可以總結為如下:

都將陣列分為已排序部分和未排序部分。

1. 選擇排序將已排序部分定義在左端,然後選擇未排序部分的最小元素和未排序部分的第乙個元素交換。

2. 氣泡排序將已排序部分定義在右端,在遍歷未排序部分的過程執行交換,將最大元素交換到最右端。

3. 插入排序將已排序部分定義在左端,將未排序部分元的第乙個元素插入到已排序部分合適的位置。

選擇排序

/**

* 【選擇排序】:最值出現在起始端

* * 第1趟:在n個數中找到最小(大)數與第乙個數交換位置

* 第2趟:在剩下n-1個數中找到最小(大)數與第二個數交換位置

* 重複這樣的操作...依次與第三個、第四個...數交換位置

* 第n-1趟,最終可實現資料的公升序(降序)排列。

* */

void selectsort(int *arr, int length) }}

}氣泡排序

/**

* 【氣泡排序】:相鄰元素兩兩比較,比較完一趟,最值出現在末尾

* 第1趟:依次比較相鄰的兩個數,不斷交換(小數放前,大數放後)逐個推進,最值最後出現在第n個元素位置

* 第2趟:依次比較相鄰的兩個數,不斷交換(小數放前,大數放後)逐個推進,最值最後出現在第n-1個元素位置

* …… ……

* 第n-1趟:依次比較相鄰的兩個數,不斷交換(小數放前,大數放後)逐個推進,最值最後出現在第2個元素位置

*/void bubllesort(int *arr, int length) } }

}折半查詢(二分查詢)

/** * 折半查詢:優化查詢時間(不用遍歷全部資料)

* * 折半查詢的原理:

* 1> 陣列必須是有序的

* 2> 必須已知min和max(知道範圍)

* 3> 動態計算mid的值,取出mid對應的值進行比較

* 4> 如果mid對應的值大於要查詢的值,那麼max要變小為mid-1

* 5> 如果mid對應的值小於要查詢的值,那麼min要變大為mid+1

* */

// 已知乙個有序陣列, 和乙個key, 要求從陣列中找到key對應的索引位置

int findkey(int *arr, int length, int key) else if (key < arr[mid]) else

}return -1;

}

面試必備資料結構與演算法

一 資料結構 1 概念 a 資料之間的關係,提高程式效率 1 邏輯關係 人為認為 1 集合 在乙個範圍內由多個資料,資料之間沒有關係 2 線性 1對1關係 3 樹型 1對多 4 圖 多對多 2 物理關係 記憶體儲存 1 順序儲存 陣列 效率高但是長度是固定的 2 鏈式儲存 鍊錶 演算法 大數字運算 ...

面試常考資料結構與演算法

資料結構部分 1 陣列和鍊錶的區別。很簡單,但是很常考,記得要回答全面 c 語言中可以用陣列處理一組資料型別相同的資料,但不允許動態定義陣列的大小,即在使用陣列之前必須確定陣列的大小。而在實際應用中,使用者使用陣列之前無法確定陣列的大小,只能夠將陣列定義成足夠大小,這樣陣列的空間可能不被使用,從而造...

面試常考資料結構與演算法

資料結構部分 1 陣列和鍊錶的區別。很簡單,但是很常考,記得要回答全面 c 語言中可以用陣列處理一組資料型別相同的資料,但不允許動態定義陣列的大小,即在使用陣列之前必須確定陣列的大小。而在實際應用中,使用者使用陣列之前無法確定陣列的大小,只能夠將陣列定義成足夠大小,這樣陣列的空間可能不被使用,從而造...