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

企业网站设计服务公司西安网络公司

企业网站设计服务公司,西安网络公司,网站 商城 app 建设,股票跟单网站开发文章目录 1、单链表1.1 链表的创建1.2 链表的遍历1.3 链表的删除1.4 链表的插入1.5 链表和数组 2、双向链表2.1 双链表的创建2.2 双链表的删除2.3 双链表的插入2.4 双向循环链表2.5 双链表优缺点 1、单链表 链表是一种物理存储单元上非连续、非顺序的存储结构,插入…

文章目录

  • 1、单链表
    • 1.1 链表的创建
    • 1.2 链表的遍历
    • 1.3 链表的删除
    • 1.4 链表的插入
    • 1.5 链表和数组
  • 2、双向链表
    • 2.1 双链表的创建
    • 2.2 双链表的删除
    • 2.3 双链表的插入
    • 2.4 双向循环链表
    • 2.5 双链表优缺点

1、单链表

链表是一种物理存储单元上非连续、非顺序的存储结构,插入和删除速度快,并且不需要像数组一样预先开辟空间链表结构可以充分利用计算机内存空间,实现灵活地内存动态管理。

Pasted-image-2025040117473344f072a03e24e176.png

链表由一系列结点组成,每个结点包括两个部分:

  • 存储数据元素的数据域
  • 存储下一个结点地址的指针域

1.1 链表的创建

1.定义结构体存储结点信息

struct node {int data;  //存储当前结点的数据值node *next;  /存储下一个结点的地址
}

2.创建头尾节点

  • 使用 new 运算符来动态申请空间
  • 使用 -> 结构体指针运算符来访问内部成员
  • 头结点数据域通常不做存储(删除结点只能通过它前一个结点指向它后一个结点,头结点没有前一个结点)

*head.datahead->data 效果是一样的。

node *head, *tail;  //定义头结点和尾结点
head = new node;  //动态申请内存空间
head->next = NULL;  //指针域初始化为空
tail = head;  //此时的头结点也是尾结点

3.添加新结点

int x;
while(cin >> x) {  //会自动获取到输入内容的结束位置,再终止输入node *p = new node;  //定义新结点p,动态申请新的空间p->data = x;  //给数据域赋值p->next = NULL;  //指针域初始化为空tail->next = p;  //连到尾结点后面tail = p;  //尾结点更新为当前的p
}

1.2 链表的遍历

node *p = head;  //使用p作为当前结点,从头开始遍历
while(p->next != NULL) {  //判断下一个结点是否为空cout << p->next->data << " ";  //输出下一个结点的数据,因为头结点无数据p = p->next;  //p更新为下一个结点
} 

1.3 链表的删除

删除单链表中p结点的下一个结点

p->next = p->next->next;  //将p所指的下一个结点修改为下一个结点的下一个结点

PixPin_2025-04-01_18-13-0901a34a3c0f76eff8.gif

1.4 链表的插入

在p结点之后插入一个结点s

node *s = new node;  //动态申请新的空间
s->next = p->next;  //先将新结点的指针域指向p的下一个结点
p->next = s;  //再将p的下一个结点修改为s

PixPin_2025-04-01_18-13-398f2e7f5b50888dea.gif

1.5 链表和数组

数组:

  • 优点:
    随机访问性强,查找速度快。
  • 缺点:
    插入和删除效率低,,可能浪费内存,,内存空间要求高,数组大小固定,不能动态拓展。

链表:

  • 优点:
    插入删除速度快;内存利用率高,不会浪费内存;大小没有固定,拓展很灵活。
  • 缺点:
    不能随机查找,必须从第一个开始遍历,查找效率低。
查找插入删除
数组O(1)O(n)O(n)
链表O(n)O(1)O(1)

2、双向链表

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继直接前驱,所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点后继结点

Pasted-image-20250401183027dc7f17708b708341.png

双向链表每个节点有三个部分:

  • 存储数据元素的数据域
  • 存储上一个节点地址的指针域
  • 存储下一个结点地址的指针域

2.1 双链表的创建

1.定义结构体存储结点信息

struct node {int data;  //存储当前结点的数据值node *pre, *next;  /存储前驱和后继结点的地址
}

2.创建头尾节点

node *head, *tail;  //定义头结点和尾结点
head = new node;  //动态申请内存空间
head->pre = NULL;  //前驱指针初始化为空
head->next = NULL;  //后继指针初始化为空
tail = head;  //此时的头结点也是尾结点

3.添加新结点

int x;
while(cin >> x) {  //会自动获取到输入内容的结束位置,再终止输入node *p = new node;  //定义新结点p,动态申请新的空间p->data = x;  //给数据域赋值p->pre = tail;  //前驱指针指向前驱节点tailp->next = NULL;  //后继指针初始化为空tail->next = p;  //尾结点的后继指针指向ptail = p;  //尾结点更新为当前的p
}

2.2 双链表的删除

删除双链表中p结点

p->pre->next = p->next;  //将p上一个结点的后继指针指向p的下一个结点
p->next->pre = p->pre;  //将p下一个结点的前驱指针指向p的上一个结点

PixPin_2025-04-01_18-48-56578d0f7d9e7af118.gif

2.3 双链表的插入

在p结点之后插入一个结点s

node *s = new node;  //动态申请新的空间
s->next = p->next;  //新结点的后继指针域指向p的下一个结点
s->pre = p;  //新结点的前驱指针指向p
p->next->pre = s;  // p的下一个结点的前驱指针指向s
p->next = s;  //p的后继指针指向s

PixPin_2025-04-01_18-51-5051df3f5373f70761.gif

2.4 双向循环链表

双向循环链表:最后一个结点的后继指针指向头结点,且头结点的前驱指针指向最后一个结点。

head->pre = tail;
tail->next = head;

2.5 双链表优缺点

  • 优点:
    从双向链表中的任意一个结点开始,都可以很方便地访问前驱结点和后继结点
  • 缺点:
    增加删除节点复杂,需要多分配一个指针存储空间
http://www.dtcms.com/wzjs/172389.html

相关文章:

  • 番禺网站制作哪里有福州网站排名
  • 继续好商会网站建设厦门人才网
  • 做外贸哪些网站可以找客户优化排名推广教程网站
  • 成都网站建设方案关键词热度分析工具
  • 哈尔滨网站只做深圳百度推广排名优化
  • 网站制作说明书种子搜索引擎在线
  • 免费b2b网站大全在线服务网站排名咨询
  • 常青藤网站建设seo优化中以下说法正确的是
  • 广州专业做网站排名哪家好百度贴吧官网网页
  • wordpress只显示文字seo词库排行
  • 多用户商城系统的服务态度seo关键字优化教程
  • 网站 建设开发合作协议整站快速排名
  • 电商网站建设需求分析 实例题热点营销案例
  • java开源网站成人营销管理培训班
  • 日本a片女人和狗做的网站北京网络营销
  • 做网站需要编码吗廊坊首页霸屏优化
  • 独立域名网站网站备案
  • 凡科做商品网站的教学视频今日冯站长之家
  • 好看的网站 你知道的2021seo关键词分析
  • cms网站内容管理系统互站网
  • 网站建设技术教程在线seo工具
  • 在一起做网店的网站的怎么购买竞价推广怎么样
  • 有哪些做鸭子网站网络营销的营销方式是什么
  • 成都专业网站建设价格网购平台推广方案
  • win8式网站后台模板微商软文范例大全100
  • 视频拍摄设备推荐河南郑州网站推广优化
  • 网站搭建服务器百度链接地址
  • 网站分析数据seochinazcom
  • 有域名后怎样做网站网站搜什么关键词好
  • 用drupal做的网站seo和sem的概念