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

网站备案号要怎么查询如何开电商店铺

网站备案号要怎么查询,如何开电商店铺,阿里备案网站,国内大型网站域名我们这节是对上节单链表的写法的补充,这是上一节的网址单链表:数据结构中的高效指针艺术-CSDN博客这节的单链表是通过数组的方式进行模拟的静态链表。 一、单链表 1.定义: 单链表(Singly Linked List)是一种线性数据…

我们这节是对上节单链表的写法的补充,这是上一节的网址单链表:数据结构中的高效指针艺术-CSDN博客这节的单链表是通过数组的方式进行模拟的静态链表。

一、单链表

1.定义:

单链表(Singly Linked List)是一种线性数据结构,由一系列节点(Node)通过指针连接而成,其定义包含以下核心要素:

节点结构:每个节点包含两部分

    • 数据域:存储具体的数据值(如整数、字符串、对象等)
    • 指针域:仅存储下一个节点的地址(或引用),用于指向后继节点

连接方式:节点之间通过指针单向串联,形成链式结构

    • 第一个节点称为头节点(Head),是访问整个链表的起点
    • 最后一个节点的指针域为null(或None),表示链表的结束
    • 只能从当前节点访问其后继节点,无法直接访问前驱节点

逻辑结构:呈现为线性序列,例如:plaintext

头节点 → 节点A → 节点B → 节点C → null

图示:

2.单链表跟数组的对比

2.1访问效率差异的根源:
数组的连续存储使其能通过下标进行随机访问(eg.a[0],a[10]);而链表的分散存储无固定地址规律,只能通过指针逐个跳转,必须顺序遍历。

2.2插入 / 删除效率差异的根源:
数组的中间操作需要 “移动元素” 以维持连续存储的特性(例如在数组 [1,2,3] 的索引 1 插入 4,需将 2、3 后移为 [1,4,2,3]);而链表的插入 / 删除仅需修改指针指向(例如在节点 A 和 B 之间插入节点 C,只需将 A.next 指向 C,C.next 指向 B),无需移动其他节点。

2.3内存灵活性差异的根源:
数组的大小依赖 “连续内存块”,初始化时需确保内存中有足够大的连续空间;而链表的节点分散存储,只需内存中有零散的小空间即可,新增节点时动态申请,灵活性更高。

3.结构体实现单链表

3.1链表的准备工作

typedef struct Node
{int data;   //数据域   Node* next; //指针域   
} Node;        

代码说明:

  1. typedef 的作用是为结构体创建一个别名(这里是 Node),简化后续使用
  2. data 是节点的数据域,用于存储具体的数据,这里定义为 int 类型,实际应用中可根据需要改为其他类型(如 charfloat 等)
  3. next 是指针域,用于指向链表中的下一个节点,使多个节点能够串联起来形成链表

关于结构体的使用方法,大家可以看我之前对结构体的介绍:C语言结构体完全指南_c语言的结构体成员写法-CSDN博客

这里的数据域就相当于我们用数组模拟时的e[]数组,next指针就相当于ne[]数组!!!大家可以把两个对比着看。

图示:

NULL表示空指针,即链表的结尾。

因为一开始链表为空:

所以头节点初始化为Node * head = NULL;

3.2头插法

图示:

// 向链表头部插入新节点
// 参数x:要插入的数据
void add_to_head(int x)
{// 1. 创建新节点:动态分配内存,生成一个新的Node结构体实例// new Node会调用Node的默认构造函数(如果有定义)Node* s = new Node;// 2. 为新节点的数据域赋值s->data = x;// 3. 连接新节点与原链表// 新节点的next指针指向当前的头节点heads->next = head;// 4. 更新头指针head = s;
}

3.3将x插入到小标是k的点的后面

图示:

代码:

// 功能:在链表的第k个节点后面插入一个新元素x
// 参数:k表示目标节点的位置(从0开始计数),x表示要插入的数据
void add(int k, int x)
{// 1. 创建新节点struct Node* s = new Node;// 2. 为新节点的数据域赋值s->data = x;// 3. 初始化指针p:让p指向链表的头节点,准备开始查找第k个节点struct Node* p = head;// 4. 查找第k个节点:通过循环移动指针p,使其指向第k个节点// 循环执行k次,每次将p移动到下一个节点for (int i = 0; i < k; i++)p = p->next;// 5. 插入新节点:调整指针关系,将新节点插入到第k个节点后面s->next = p->next;// 再让第k个节点的next指针指向新节点,完成插入p->next = s;
}

注意在插入时,要确保链表不为空!!!

3.4将下标是k的点后面的点删除

图示:

代码:

// 功能:删除链表中第k个节点后面的那个节点
// 参数:k表示目标节点的位置(从0开始计数)
void move(int k)
{// 1. 从链表头部开始查找,p初始指向头节点struct Node* p = head;// 2. 循环k次,将p移动到第k个节点for (int i = 0; i < k; i++)p = p->next;  // 每次循环移动到下一个节点// 3. 关键操作:将第k个节点的next指针跳过其后的一个节点// 即:删除第k个节点后面的那个节点(第k+1个节点)p->next = p->next->next;
}

注意:

在 C++ 中,使用new动态分配的内存(如链表节点)必须通过delete手动释放,否则会导致内存泄漏。释放链表节点内存的时机和场景主要有以下几种:

1.1 删除节点时立即释放

1.2 链表不再使用时整体释放

1.3.链表结构被销毁时

关键原则:

  • 配对使用:new分配的内存必须有对应的delete释放,避免内存泄漏。
  • 避免重复释放:同一内存块不能被delete多次,否则会导致程序崩溃。

对于释放内存空间的问题大家可以仔细了解一下!!!

二、总结

学习单链表的核心是 “建立指针思维”—— 不纠结于节点的物理位置,而是关注指针的指向关系;同时重视边界条件(空链表、尾节点、单节点)和内存管理(动态链表)。通过 “概念理解→画图分析→代码实现→调试验证” 的流程,可逐步掌握单链表的本质。在学习链表的时候可以多画图,去理解它们的关系。

大家可以把数组模拟链表的方法和结构体模拟链表的方法结合起看一下哈。

成功的秘诀就是每天都比别人多努力一点!!!

http://www.dtcms.com/a/405537.html

相关文章:

  • 网站客户案例怎么恶意点击对手竞价
  • 沈阳网站选禾钻科技模板形的网站制作
  • 响应式网站制作流程用手机免费制作app软件下载
  • 网站备案完毕 怎样建设网站网站开发需要什么设备
  • 网站建设需求分析有什么内容小树建站平台
  • 高端建站用什么软件北京网站推广
  • 鞍山网站制作的网站以百度云做网站空间
  • 上海建设银行青浦分行网站交换友情链接推广法
  • 深圳网站导航wordpress管理员帐号
  • 网站建设与管理 市场分析个人名义做网站能备案吗
  • 山东做网站的公司有哪些哪些网站是做外贸生意的
  • 中华门窗网怎么做网站拓者吧室内设计网站
  • 网站建设技术教程视频宜兴经济开发区人才网
  • 沈阳关键词优化价格网站seo工作内容
  • 一份完整的网站策划书公众号代运营费用
  • 一个网站多个域名重定向怎么做宝坻做网站
  • 网站菜单导航制作教程什么网站可以做外国生意
  • 弹性云主机做网站哪个找房网站好
  • 网站策划网温州文成县高端网站设计
  • 免费域名申请网站空间网站做虚假宣传有没有做处罚
  • 做传销网站php企业网站管理系统
  • 做网站哪些公司好云起时网站建设
  • 网络营销与管理专业是干什么的旺道seo推广效果怎么样
  • 新彊生产建设兵团网站网站icp备案查询官网
  • 徐州市政建设集团公司网站西安推广公司无网不胜
  • 上海网站建设公司介绍网站建设投
  • 网站建设与运营市场风险邯郸信息港招聘信息
  • 西安公司注册网站网站建设 教案
  • 广州网站推广html网页设计作业成品代码免费下载
  • 建购物网站要多少钱重庆seo推广外包