引言
? ? ? ? 啟航篇,理解什么是數據結構和算法
在 C 語言編程領域,數據結構和算法是兩個核心且緊密相關的概念
一、數據結構
定義
????????數據結構是指相互之間存在一種或多種特定關系的數據元素的集合(比如數組),它是組織和存儲數據的方式,目的是為了更高效地對數據進行訪問、插入、刪除、修改等操作。
????????不同的數據結構適用于不同的應用場景,合理選擇數據結構可以顯著提高程序的性能。
下面以數組來理解一下?
例子:數組(Array)
? ? ? ? 數組就是一種很簡單的數據結構
????????數組是一種線性數據結構,它由相同類型的元素組成,這些元素在內存中連續存儲。可以通過下標快速訪問數組中的任意元素。
#include <stdio.h>int main() {// 定義一個包含5個整數的數組int arr[5] = {1, 2, 3, 4, 5};// 訪問數組元素for (int i = 0; i < 5; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}
????????當然數據結構還有很多很多,這里是以數組作為一個例子,帶你理解數據結構這個定義,如果還是不理解數據結構的話,沒關系,當你學了許多數據結構后,你肯定會有理解,這時再看這個定義,就可以聯想到那些數據結構,肯定是可以理解的
?????????數據結合和算法是相互配合使用的,下面來看什么是算法
二、算法
定義
????????算法是指解決特定問題的一系列明確的、有限的操作步驟。它是對特定問題求解步驟的一種描述,是指令的有限序列,其中每一條指令表示一個或多個操作。算法具有有窮性、確定性、可行性、輸入和輸出等特性。
例子1. 排序算法 - 冒泡排序(Bubble Sort)
????????冒泡排序是一種簡單的排序算法,它重復地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。
#include <stdio.h>// 冒泡排序
void bubbleSort(int arr[], int n) {for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}int main() {int arr[] = {64, 34, 25, 12, 22, 11, 90};int n = sizeof(arr) / sizeof(arr[0]);// 調用冒泡排序函數bubbleSort(arr, n);// 輸出排序后的數組for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}
????????這里的冒泡排序,就是一種算法,說白了,算法就是解決某個特定類型的問題而寫的代碼程序
例子2. 搜索算法 - 線性搜索(Linear Search)
????????線性搜索是一種簡單的搜索算法,它從數組的第一個元素開始,逐個比較元素,直到找到目標元素或遍歷完整個數組。
#include <stdio.h>// 線性搜索
int linearSearch(int arr[], int n, int target) {for (int i = 0; i < n; i++) {if (arr[i] == target) {return i; // 找到目標元素,返回其下標}}return -1; // 未找到目標元素,返回 -1
}int main() {int arr[] = {10, 20, 30, 40, 50};int n = sizeof(arr) / sizeof(arr[0]);int target = 30;// 調用線性搜索函數int result = linearSearch(arr, n, target);if (result != -1) {printf("目標元素 %d 的下標是 %d\n", target, result);} else {printf("未找到目標元素 %d\n", target);}return 0;
}
?????????這里的搜索算法,就是一種算法,是為了解決搜索問題而有的代碼
三、數據結構與算法的關系
????????數據結構和算法是相輔相成的。
????????數據結構是算法實現的基礎,不同的數據結構會影響算法的實現方式和效率;
????????算法則是對數據結構進行操作的具體步驟,合理的算法可以充分發揮數據結構的優勢,提高程序的性能。
????????例如,在一個大規模的數據集合中進行查找操作,如果使用數組存儲數據,可能使用線性搜索算法,時間復雜度為?O(n);如果使用哈希表這種數據結構,結合哈希查找算法,平均時間復雜度可以達到?O(1)。(看不懂沒關系,以后學到了肯定就明白了)。