当前位置:首页 > 编程笔记 > 正文
已解决

C++---链表

来自网友在路上 168868提问 提问时间:2023-09-19 04:46:52阅读次数: 68

最佳答案 问答题库688位专家为你答疑解惑

1、链表

1.1、链表的结构

image-20230918180750132

  • 每个链表开头都有一个头指针Head
  • 尾节点的指针域为NULL,用于判断此列表是否结束
    • 如果一个链表开始就为NULL,那么该链表为空链表
  • 链表中的先后不代表在真实内存中的位置,只是单纯的逻辑上关系

1.2、创建链表

  1. 我们首先利用结构体创建一个Student的结构体
//利用链表创建3个学生的信息,学生信息包括姓名和年龄
struct Student
{char name[20];int age;//这里存放的下个节点的地址Student *next;
};
  1. 接着我们给我们的节点赋值,跟着上面的图,我们知道需要一个头节点(无数据,只存地址),一个尾节点(有数据,地址为NULL)
	Student c = { "t3",21, nullptr};//尾节点,指针域为nullptrStudent b = { "t2",27,&c };Student a = { "t1",22,&b };Student* head = &a; //头指针,指向a,无值

1.3、链表数据的遍历

创建完链表后,我们来输出一下内容,那么我们就需要链表a的地址,然后输出完当前内容后,将指针指向下一个地址

	//定义一个指针来指向headStudent *pointer = head;//循环到尾节点(nullptr)时结束while (pointer){cout << pointer->name << " " << pointer->age << endl;//输出完后指向下一个pointer = pointer->next;}

image-20230918184725137

1.4、链表的查找

  1. 我们查找一下t2这个人,并返回他的年龄
	while (pointer){if (pointer->name=="t2"){cout << pointer->age << endl;break;}pointer = pointer->next;}if (pointer==nullptr){cout << "没有找到此人" << endl;}

1.5、链表的插入

我们首先手动新加一条数据

Student d = { "t4",21,nullptr };

​ 区别与数组,我们不需要移动任何数据,只需要将要插入的地方的前一项地址指向插入的数据,插入的数据再指向后一条数据即可(PS:灵魂画手,不要介意)

image-20230918195201994

​ 这里需要注意一点,先指向C,不然早断开C会找不到C的地址,也就是E的指针域要先指向C的地址,防止丢失。

​ 那么我们就在t2的后面插入一条数据

	//before指向前一条数据//pointer指向后一条数据Student* before = head;Student *pointer = before->next;while (before){if (before->name=="t2"){d.next = pointer; //赋值&c的地址before->next = &d; //t2断开c的地址,链接d的地址break;}//如果不匹配,就让俩个指针往后走before = pointer;pointer = before->next;}

image-20230918202035976

1.6、链表的删除

那么删除就只需要将要被删除的节点指向的地址,给到前一个节点。

image-20230918202535567

那我们就删除上面新加的t4

	before = head;pointer = before->next;//这里需要注意是因为要删除后一个,所以pointer作为循环条件while (pointer){if (pointer->name == "t4"){before->next = pointer->next;break;}before = pointer;pointer = pointer->next;}

image-20230918203247697

2、链表和数组的区别

数组链表内存占用连续内存灵活,无限制元素类型相同类型可以相同,可以不同组织形式在内存中连续排序各节点在内存中彼此分散,靠指针联系插入删除元素需要遍历只修改某个或几个节点的指针

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"C++---链表":http://eshow365.cn/6-9118-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!