马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
利用C++实现的数据结构示例,涵盖链表、数组、树和图的根本操纵:
- #include <iostream>
- using namespace std;
- struct Node {
- int data;
- Node* next;
- Node(int val) : data(val), next(nullptr) {}
- };
- class LinkedList {
- private:
- Node* head;
- public:
- LinkedList() : head(nullptr) {}
- void insert(int val) {
- Node* newNode = new Node(val);
- if (!head) {
- head = newNode;
- return;
- }
- Node* temp = head;
- while (temp->next) {
- temp = temp->next;
- }
- temp->next = newNode;
- }
- void remove(int val) {
- if (!head) return;
- if (head->data == val) {
- Node* temp = head;
- head = head->next;
- delete temp;
- return;
- }
- Node* curr = head;
- while (curr->next && curr->next->data != val) {
- curr = curr->next;
- }
- if (curr->next) {
- Node* temp = curr->next;
- curr->next = curr->next->next;
- delete temp;
- }
- }
- void print() {
- Node* temp = head;
- while (temp) {
- cout << temp->data << " ";
- temp = temp->next;
- }
- cout << endl;
- }
- };
复制代码- class DynamicArray {
- private:
- int* arr;
- int capacity;
- int size;
-
- void resize() {
- capacity *= 2;
- int* newArr = new int[capacity];
- for (int i = 0; i < size; i++) {
- newArr[i] = arr[i];
- }
- delete[] arr;
- arr = newArr;
- }
- public:
- DynamicArray() : capacity(2), size(0) {
- arr = new int[capacity];
- }
- void push_back(int val) {
- if (size == capacity) resize();
- arr[size++] = val;
- }
- void pop_back() {
- if (size > 0) size--;
- }
- int& operator[](int index) {
- return arr[index];
- }
- int getSize() {
- return size;
- }
- };
复制代码- class TreeNode {
- public:
- int val;
- TreeNode* left;
- TreeNode* right;
- TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
- };
- class BinarySearchTree {
- private:
- TreeNode* root;
- TreeNode* insertNode(TreeNode* node, int val) {
- if (!node) return new TreeNode(val);
- if (val < node->val) {
- node->left = insertNode(node->left, val);
- } else {
- node->right = insertNode(node->right, val);
- }
- return node;
- }
- void inorder(TreeNode* node) {
- if (!node) return;
- inorder(node->left);
- cout << node->val << " ";
- inorder(node->right);
- }
- public:
- BinarySearchTree() : root(nullptr) {}
- void insert(int val) {
- root = insertNode(root, val);
- }
- void printInorder() {
- inorder(root);
- cout << endl;
- }
- };
复制代码- #include <vector>
- class Graph {
- private:
- vector<vector<bool>> adjMatrix;
- int numVertices;
- void DFSutil(int v, vector<bool>& visited) {
- visited[v] = true;
- cout << v << " ";
- for (int i = 0; i < numVertices; i++) {
- if (adjMatrix[v][i] && !visited[i]) {
- DFSutil(i, visited);
- }
- }
- }
- public:
- Graph(int n) : numVertices(n) {
- adjMatrix.resize(n, vector<bool>(n, false));
- }
- void addEdge(int i, int j) {
- adjMatrix[i][j] = true;
- adjMatrix[j][i] = true;
- }
- void DFS(int start) {
- vector<bool> visited(numVertices, false);
- DFSutil(start, visited);
- cout << endl;
- }
- };
复制代码 利用示例:- int main() {
- // 链表测试
- LinkedList list;
- list.insert(1);
- list.insert(2);
- list.insert(3);
- list.remove(2);
- list.print(); // 输出: 1 3
- // 动态数组测试
- DynamicArray arr;
- arr.push_back(10);
- arr.push_back(20);
- cout << arr[1] << endl; // 输出: 20
- // 二叉搜索树测试
- BinarySearchTree bst;
- bst.insert(5);
- bst.insert(3);
- bst.insert(7);
- bst.printInorder(); // 输出: 3 5 7
- // 图测试
- Graph g(4);
- g.addEdge(0, 1);
- g.addEdge(0, 2);
- g.addEdge(1, 3);
- g.DFS(0); // 输出: 0 1 3 2
- return 0;
- }
复制代码 这些实现展示了数据结构的根本操纵:
- 链表的插入、删除和遍历
- 动态数组的主动扩容机制
- 二叉搜索树的递归插入和中序遍历
- 图的毗邻矩阵存储和深度优先搜索
每个实现都遵照数据结构的焦点原理,同时保持了代码的简便性和可读性。可以根据具体需求在这些根本实现上添加更多功能或举行优化。
|