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

网站的图片滚动怎么做的/seo站外推广

网站的图片滚动怎么做的,seo站外推广,昆明商城网站建设,wordpress 速度慢在学习数据结构的过程中,链表是一个非常重要的基础数据结构。今天,我们将通过C手动实现一个单链表,并添加一个逆序打印的功能,帮助大家更好地理解链表的实现和操作。 一、链表简介 链表是一种线性数据结构,其中每个元…

在学习数据结构的过程中,链表是一个非常重要的基础数据结构。今天,我们将通过C++手动实现一个单链表,并添加一个逆序打印的功能,帮助大家更好地理解链表的实现和操作。

一、链表简介

链表是一种线性数据结构,其中每个元素(称为节点)包含数据部分和指向下一个节点的指针。与数组不同,链表的内存空间是动态分配的,因此可以灵活地插入和删除节点,而不需要移动其他元素。

单链表是最简单的链表形式,每个节点只有一个指向下一个节点的指针。

二、单链表的实现

1. 定义链表节点

我们首先定义链表节点的结构。每个节点包含一个整数值和一个指向下一个节点的指针。

#include <iostream>
using namespace std;// 定义链表节点结构
struct ListNode {int val;          // 节点存储的数据ListNode* next;   // 指向下一个节点的指针// 构造函数ListNode(int x) : val(x), next(nullptr) {}
};

2. 定义链表类

接下来,我们定义一个链表类,包含链表的基本操作,如插入、删除和遍历。

class LinkedList {
private:ListNode* head; // 链表的头指针public:// 构造函数LinkedList() : head(nullptr) {}// 析构函数,释放链表内存~LinkedList() {ListNode* current = head;while (current != nullptr) {ListNode* temp = current;current = current->next;delete temp;}}// 插入节点到链表头部void insertAtHead(int value) {ListNode* newNode = new ListNode(value);newNode->next = head;head = newNode;}// 插入节点到链表尾部void insertAtTail(int value) {ListNode* newNode = new ListNode(value);if (head == nullptr) {head = newNode;return;}ListNode* current = head;while (current->next != nullptr) {current = current->next;}current->next = newNode;}// 删除节点void deleteNode(int value) {if (head == nullptr) return; // 链表为空if (head->val == value) {ListNode* temp = head;head = head->next;delete temp;return;}ListNode* current = head;while (current->next != nullptr && current->next->val != value) {current = current->next;}if (current->next != nullptr) {ListNode* temp = current->next;current->next = current->next->next;delete temp;}}// 打印链表void printList() {ListNode* current = head;while (current != nullptr) {cout << current->val << " -> ";current = current->next;}cout << "nullptr" << endl;}// 逆序打印链表void reversePrint(ListNode* node) {if (node == nullptr) return;reversePrint(node->next);cout << node->val << " ";}// 调用逆序打印void reversePrint() {reversePrint(head);cout << endl;}
};

3. 测试链表

我们编写一个简单的测试程序来验证链表的功能,包括插入、删除、正序打印和逆序打印。

int main() {LinkedList list;// 插入节点list.insertAtHead(3);list.insertAtHead(2);list.insertAtHead(1);list.insertAtTail(4);list.insertAtTail(5);// 打印链表cout << "链表内容: ";list.printList();// 逆序打印链表cout << "逆序打印链表: ";list.reversePrint();// 删除节点list.deleteNode(3);cout << "删除节点 3 后的链表: ";list.printList();// 删除头节点list.deleteNode(1);cout << "删除头节点后的链表: ";list.printList();return 0;
}

4. 输出示例

运行上述代码后,输出如下:

链表内容: 1 -> 2 -> 3 -> 4 -> 5 -> nullptr
逆序打印链表: 5 4 3 2 1
删除节点 3 后的链表: 1 -> 2 -> 4 -> 5 -> nullptr
删除头节点后的链表: 2 -> 4 -> 5 -> nullptr

三、逆序打印的实现

逆序打印链表的关键在于递归。我们定义了一个递归函数 reversePrint,它先递归到链表的尾部,然后在回溯过程中打印每个节点的值。这种方法利用了递归的调用栈,自然地实现了逆序打印。

逆序打印函数

void reversePrint(ListNode* node) {if (node == nullptr) return;reversePrint(node->next);cout << node->val << " ";
}

调用逆序打印

void reversePrint() {reversePrint(head);cout << endl;
}

四、总结

通过手动实现单链表,我们不仅加深了对链表数据结构的理解,还学会了如何操作链表节点,包括插入、删除和遍历。此外,逆序打印功能的实现进一步展示了递归在链表操作中的强大作用。

http://www.whsansanxincailiao.cn/news/32021994.html

相关文章:

  • 北京网站备案地址/全网关键词搜索排行
  • 山东大学信息服务平台/云优化seo软件
  • http://设计家园.com/wordpress/培训考试/360优化大师官方下载手机
  • 婚恋网站应聘做销售/最专业的seo公司
  • 百石网怎么做网站/重大新闻事件2023
  • 网站做付款页面/360推广
  • 建站公司 万维科技/推荐6个免费国外自媒体平台
  • 办网站怎么赚钱/东莞网站设计排行榜
  • 广州开发网站设计/杭州产品推广服务公司
  • 做精美ppt的网站/微信营销方案
  • 环球资源网的网站特色/刷seo快速排名
  • 百度一下就知道/电子商务seo
  • 网站开发运营职位/网络推广平台有哪些渠道
  • 手机免费做网站/百度网站禁止访问怎么解除
  • mac 网站开发软件有哪些/市场调研报告范文2000
  • vs做的网站排版错位/百度推广首次开户需要多少钱
  • 做行程规划的旅行网站/百度移动端点赞排名软件
  • asp网站怎么安装/seo方法
  • 在旅行社做网站运营/界首网站优化公司
  • 个人php网站/企业网站的网络营销功能
  • 肥城网站开发公司/网站建站哪家公司好
  • 站酷网页/优化关键词可以选择哪个工具
  • 做英语翻译兼职的网站/兰州网络推广优化服务
  • 长沙百度网站优化/百度推广优化排名
  • 做基础工程分包应上什么网站/推广app赚佣金平台
  • 1空间做2个网站/营销培训内容有哪些
  • 湖南电商网站建设/百度收录提交工具
  • 深圳公司网站建设服务/seo店铺描述
  • 比特币矿池网站怎么做/做网络营销推广
  • 哪家网站建设做的好/seo公司推广宣传