一、什么是数据结构和算法
在计算机科学中,数据结构是硬件和软件组合在一起,用于组织和存储数据的方式。算法则是指解决问题的一系列清晰指令集合,也常被称为逻辑或过程。数据结构和算法是计算机科学的基础,几乎在所有领域都有应用。 数据结构可分为线性数据结构和非线性数据结构,线性数据结构包括数组、链表、栈和队列等,非线性数据结构包括树和图等。算法方面则可分为查找算法、排序算法和字符串匹配算法等。
二、常见的数据结构实现
在C++中,常见的数据结构实现方式有数组,链表和树等。
1、数组
#include <iostream>
#include <array>
using namespace std;
void printArray(array<int, 5> arr) {
for (int i = 0; i < arr.size(); i++) {
cout << arr[i] << " ";
}
cout << endl;
}
int main() {
array<int, 5> arr = {1, 2, 3, 4, 5};
printArray(arr);
arr.fill(0); // 将数组所有元素赋值为0
printArray(arr);
arr.swap(array<int, 5> {5, 4, 3, 2, 1}); // 交换数组的元素
printArray(arr);
return 0;
}
上述代码实现了一个数组的创建,遍历和修改操作。
2、链表
#include <iostream>
using namespace std;
class Node {
public:
int val;
Node *next;
Node(int data) {
val = data;
next = nullptr;
}
};
void printLinkedList(Node *head) {
Node *p = head;
while (p != nullptr) {
cout << p->val << " ";
p = p->next;
}
cout << endl;
}
int main() {
Node *head = new Node(1);
Node *node1 = new Node(2);
Node *node2 = new Node(3);
head->next = node1;
node1->next = node2;
printLinkedList(head);
return 0;
}
上述代码实现了一个链表的创建和遍历操作。
3、树
#include <iostream>
using namespace std;
class TreeNode {
public:
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int data) {
val = data;
left = nullptr;
right = nullptr;
}
};
void preorder(TreeNode *root) {
if (root == nullptr) return;
cout << root->val << " ";
preorder(root->left);
preorder(root->right);
}
void inorder(TreeNode *root) {
if (root == nullptr) return;
inorder(root->left);
cout << root->val << " ";
inorder(root->right);
}
void postorder(TreeNode *root) {
if (root == nullptr) return;
postorder(root->left);
postorder(root->right);
cout << root->val << " ";
}
int main() {
TreeNode *root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(7);
cout << "preorder traversal: ";
preorder(root);
cout << endl;
cout << "inorder traversal: ";
inorder(root);
cout << endl;
cout << "postorder traversal: ";
postorder(root);
cout << endl;
return 0;
}
上述代码实现了一个二叉树的创建和三种不同的遍历方式。
三、常见的算法实现
在C++中,常见的算法实现方式有搜索,排序和字符串匹配等。
1、搜索
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> nums = {1, 5, 3, 7, 4};
int target = 7;
sort(nums.begin(), nums.end()); // 搜索前需要先排序
if (binary_search(nums.begin(), nums.end(), target)) {
cout << "found" << endl;
} else {
cout << "not found" << endl;
}
return 0;
}
上述代码实现了一个二分查找的功能。
2、排序
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> nums = {1, 5, 3, 7, 4};
sort(nums.begin(), nums.end()); // 使用默认的升序排序
for (int num : nums) {
cout << num << " ";
}
cout << endl;
return 0;
}
上述代码实现了一个排序的功能。
3、字符串匹配
#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main() {
string str = "hello, world";
regex pattern("world"); // 定义需要匹配的字符串
if (regex_search(str, pattern)) {
cout << "found" << endl;
} else {
cout << "not found" << endl;
}
return 0;
}
上述代码实现了一个字符串匹配的功能。