当前位置:首页 C++ > 正文

c++链表和函数指针

作者:野牛程序员:2023-12-28 17:17:08 C++阅读 2399

链表是一种常见的数据结构,而函数指针则允许在运行时动态地选择调用的函数。下面是一个简单的示例,演示如何在C++中使用链表和函数指针:

#include <iostream>

// 定义链表节点
struct Node {
    int data;
    Node* next;
    
    Node(int value) : data(value), next(nullptr) {}
};

// 打印链表元素
void printList(Node* head) {
    Node* current = head;
    while (current != nullptr) {
        std::cout << current->data << " ";
        current = current->next;
    }
    std::cout << std::endl;
}

// 函数指针类型定义
typedef void (*FunctionPointer)(Node*);

// 对链表进行操作的函数1
void squareData(Node* head) {
    Node* current = head;
    while (current != nullptr) {
        current->data *= current->data;
        current = current->next;
    }
}

// 对链表进行操作的函数2
void doubleData(Node* head) {
    Node* current = head;
    while (current != nullptr) {
        current->data *= 2;
        current = current->next;
    }
}

int main() {
    // 创建链表
    Node* head = new Node(1);
    head->next = new Node(2);
    head->next->next = new Node(3);

    // 打印原始链表
    std::cout << "Original List: ";
    printList(head);

    // 使用函数指针调用函数1
    FunctionPointer funcPtr1 = squareData;
    funcPtr1(head);

    // 打印操作后的链表
    std::cout << "List after squaring: ";
    printList(head);

    // 使用函数指针调用函数2
    FunctionPointer funcPtr2 = doubleData;
    funcPtr2(head);

    // 打印最终的链表
    std::cout << "List after doubling: ";
    printList(head);

    // 释放链表内存
    while (head != nullptr) {
        Node* temp = head;
        head = head->next;
        delete temp;
    }

    return 0;
}

这个例子中,定义了一个简单的链表结构 Node,以及两个操作链表的函数 squareDatadoubleData。然后,通过函数指针 FunctionPointer 类型,在运行时选择调用哪个函数。在 main 函数中,创建了一个链表,通过函数指针调用了两个不同的函数,并最终释放了链表的内存。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击