数据结构与算法之美总结(数组、链表、栈、队列、递归、排序及二分)
发布人:shili8
发布时间:2025-01-06 17:59
阅读次数:0
**数据结构与算法之美总结**
在计算机科学中,数据结构和算法是两个基本概念,它们共同构成了编程的基础。数据结构是指组织和存储数据的方式,而算法则是指解决问题或完成任务所遵循的步骤序列。在本文中,我们将总结一些常见的数据结构和算法,包括数组、链表、栈、队列、递归、排序及二分。
**1. 数组**
数组是一种线性数据结构,它由一系列连续的元素组成,每个元素都有一个唯一的索引或下标。数组是最基本也是最常用的数据结构之一。
c//例子:创建并初始化一个整型数组int arr[5] = {1,2,3,4,5};
**2. 链表**
链表是一种非线性数据结构,它由一系列的结点组成,每个结点都包含一个值和一个指向下一个结点的引用。链表可以动态地增加或减少结点。
c//例子:创建并初始化一个整型链表struct Node {
int data;
struct Node* next;
};
int main() {
struct Node head = {1, NULL};
struct Node* p = &head;
// 创建链表 for (int i =2; i <=5; i++) {
struct Node* newNode = malloc(sizeof(struct Node));
newNode->data = i;
newNode->next = NULL;
p->next = newNode;
p = newNode;
}
return0;
}
**3. 栈**
栈是一种后进先出的数据结构,它遵循 LIFO(Last In First Out)原则。栈的元素可以通过 push 和 pop 操作添加或删除。
c//例子:创建并初始化一个整型栈typedef struct {
int* data;
int top;
int capacity;
} Stack;
int main() {
Stack stack = {malloc(5 * sizeof(int)), -1,5};
// push元素 for (int i =0; i < 5; i++) {
stack.data[++stack.top] = i;
}
// pop元素 while (stack.top >=0) {
printf("%d ", stack.data[stack.top--]);
}
free(stack.data);
return0;
}
**4. 队列**
队列是一种先进先出的数据结构,它遵循 FIFO(First In First Out)原则。队列的元素可以通过 enqueue 和 dequeue 操作添加或删除。
c//例子:创建并初始化一个整型队列typedef struct {
int* data;
int front;
int rear;
int capacity;
} Queue;
int main() {
Queue queue = {malloc(5 * sizeof(int)), -1, -1,5};
// enqueue元素 for (int i =0; i < 5; i++) {
queue.data[++queue.rear] = i;
}
// dequeue元素 while (queue.front <= queue.rear) {
printf("%d ", queue.data[queue.front++]);
}
free(queue.data);
return0;
}
**5. 递归**
递归是一种编程技术,它允许函数调用自身以解决问题或完成任务。递归通常用于处理树形结构或其他递归关系。
c//例子:计算斐波那契数列的第 n 项int fibonacci(int n) {
if (n <=1) return n;
else return fibonacci(n -1) + fibonacci(n -2);
}
**6. 排序**
排序是一种算法,用于将数据按一定顺序排列。常见的排序算法包括冒泡排序、选择排序、插入排序等。
c//例子:使用冒泡排序对整型数组进行排序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]) {
// swap(arr[j], arr[j +1]);
int temp = arr[j];
arr[j] = arr[j +1];
arr[j +1] = temp;
}
}
}
}
**7. 二分**
二分是一种算法,用于在有序数组中快速找到目标元素。二分通常用于实现查找、插入或删除等操作。
c//例子:使用二分查找对整型数组进行查找int binarySearch(int arr[], int n, int target) {
int left =0;
int right = n -1;
while (left <= right) {
int mid = left + (right - left) /2;
if (arr[mid] == target) return mid;
else if (arr[mid] < target) left = mid +1;
else right = mid -1;
}
return -1; // 未找到目标元素}
以上就是本文对数据结构和算法的总结。这些概念是编程的基础,理解它们对于编写高效、可靠且易于维护的代码至关重要。

