1. 链表(Linked List)
单向链表(C++)----------通过指针实现动态内存管理。
#include <iostream>
struct Node {
int data;
Node* next;
};
class LinkedList {
private:
Node* head;
public:
LinkedList() : head(nullptr) {}
void append(int data) {
Node* newNode = new Node{data, nullptr};
if (!head) {
head = newNode;
} else {
Node* temp = head;
while (temp->next) {
temp = temp->next;
}
temp->next = newNode;
}
}
void print() {
Node* temp = head;
while (temp) {
std::cout << temp->data << " -> ";
temp = temp->next;
}
std::cout << "nullptr" << std::endl;
}
~LinkedList() {
Node* temp;
while (head) {
temp = head;
head = head->next;
delete temp;
}
}
};
int main() {
LinkedList list;
list.append(1);
list.append(2);
list.append(3);
list.print();
return 0;
}
2. 数组(Array)
动态数组(C++)-------使用std::vector
简化动态数组操作。
#include <iostream>
#include <vector>
int main() {
std::vector<int> arr = {1, 2, 3, 4, 5};
// 添加元素
arr.push_back(6);
// 遍历数组
for (int i : arr) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
3. 树(Tree)
二叉树(C++)-------通过递归实现二叉树的插入和遍历。
#include <iostream>
struct TreeNode {
int data;
TreeNode* left;
TreeNode* right;
TreeNode(int val) : data(val), left(nullptr), right(nullptr) {}
};
class BinaryTree {
private:
TreeNode* root;
void insert(TreeNode*& node, int data) {
if (!node) {
node = new TreeNode(data);
} else if (data < node->data) {
insert(node->left, data);
} else {
insert(node->right, data);
}
}
void inorder(TreeNode* node) {
if (node) {
inorder(node->left);
std::cout << node->data << " ";
inorder(node->right);
}
}
public:
BinaryTree() : root(nullptr) {}
void insert(int data) {
insert(root, data);
}
void printInorder() {
inorder(root);
std::cout << std::endl;
}
};
int main() {
BinaryTree tree;
tree.insert(5);
tree.insert(3);
tree.insert(7);
tree.insert(2);
tree.insert(4);
tree.printInorder();
return 0;
}
4. 图(Graph)
邻接表表示法(C++)-------使用邻接表表示图结构。
#include <iostream>
#include <list>
class Graph {
private:
int V; // 顶点数
std::list<int>* adj; // 邻接表
public:
Graph(int V) : V(V) {
adj = new std::list<int>[V];
}
void addEdge(int v, int w) {
adj[v].push_back(w); // 添加边
}
void printGraph() {
for (int i = 0; i < V; ++i) {
std::cout << "顶点 " << i << " 的邻接点: ";
for (int neighbor : adj[i]) {
std::cout << neighbor << " ";
}
std::cout << std::endl;
}
}
~Graph() {
delete[] adj;
}
};
int main() {
Graph g(4);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);
g.printGraph();
return 0;
}