当前位置: 首页 > article >正文

C或C++中实现数据结构课程中的链表、数组、树和图

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;
}


http://www.kler.cn/a/588721.html

相关文章:

  • matlab 模糊pid实现温度控制
  • nginx请求限流设置:常见的有基于 IP 地址的限流、基于请求速率的限流以及基于连接数的限流
  • Windows系统中安装Rust工具链方法
  • 数据结构篇——树(1)
  • 人工智能中神经网络是如何进行学习的
  • 1.Windows+vscode+cline+MCP配置
  • 传感云揭秘:边缘计算的革新力量
  • RabbitMQ从入门到实战-知识详情总结
  • 在办公电脑上本地部署 70b 的 DeepSeek 模型并实现相应功能的大致步骤
  • NO.40十六届蓝桥杯备战|指针和动态内存管理|取地址操作符|解引用操作符|指针+-整数|void*|new|delete(C++)
  • 7-14 利用正则表达式得到一段HTML文本中所有超链接对应的网址
  • vue echarts封装使用
  • 车载以太网测试-14【交换机以及MAC地址表】
  • MongoDB 和 Elasticsearch的区别、优缺点对比,以及选型建议
  • Chrome/Edge浏览器离线安装插件全攻略:CRX/ZIP文件手动安装教程
  • std::list的模拟实现
  • 零成本本地化搭建开源AI神器LocalAI支持CPU推理运行部署方案
  • 【WEB APIs】DOM-节点操作
  • 钉钉项目报销与金蝶系统高效集成技术解析
  • 人工智能中的线性代数基础详解