【数据结构】浅谈数据结构-链表【思路+例题学习】

🏆今日学习目标:
🍀学习算法-数据结构-链表
✅创作者:贤鱼
⏰预计时间:30分钟
🎉个人主页:贤鱼的个人主页
🔥专栏系列:算法
🍁贤鱼的个人社区,欢迎你的加入 贤鱼摆烂团

请添加图片描述

🍁链表

🍀介绍🍀

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。

每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域

🍀分类🍀

🍉单项链表🍉

在这里插入图片描述

每一个单元都指向下一位

在这里插入图片描述

🍉循环链表🍉

在这里插入图片描述

和单链表差不多,只不过第一位和最后一位相连,变成了循环链表

🍉双向链表🍉

在这里插入图片描述

🍁常见操作🍁

🍀链表🍀

头文件

#include

插入

前方插入push_front(数字)
在链表最前面插入一个数字
后方插入push_back(数字)
链表最后面插入一个数字
中间插入insert(迭代器,数字)
在迭代器指向的链表元素前面插入一个数字

删除

erase(迭代器)
删除迭代器指向的链表元素

查找

begin()
链表头
end()
链表末尾
需要迭代器储存

输出

需要迭代器,后文会讲

结构体模拟部分看例题解法2

🍀迭代器🍀

list::iterator 名字

迭代器是一种检查容器内元素并遍历元素的数据类型
可以理解为数组的下标
举个例子

list<int>::iterator pos[10005];
list<int> m;
pos[5]//迭代器代表的内容就是链表中元素为5的部分
list<int>::iterator iterbegin;
iterbegin=m.begin();
cout<<*iterbegin;//输出链表第一位数值
//循环
list<int>::iterator iterend;
iterend=m.end();
for(;iterbegin!=iterend;iterbegin++){
   
//内容
}

循环也很好理解

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

只有当begin=end的时候循环就会结束

🍁例题🍁

🍀队列安排🍀

🍎题目描述🍎

一个学校里老师要将班上 N N N 个同学排成一列,同学被编号为 1 ∼ N 1\sim N 1N,他采取如下的方法:

  1. 先将 1 1 1 号同学安排进队列,这时队列中只有他一个人;

  2. 2 − N 2-N 2N 号同学依次入列,编号为 i i i 的同学入列方式为:老师指定编号为 i i i 的同学站在编号为 1 ∼ ( i − 1 ) 1\sim(i-1) 1(i1) 中某位同学(即之前已经入列的同学)的左边或右边;

  3. 从队列中去掉 M ( M < N ) M(M<N) M(M<N) 个同学,其他同学位置顺序不变。

在所有同学按照上述方法队列排列完毕后,老师想知道从左到右所有同学的编号。

🍎输入格式🍎

1 1 1 行为一个正整数 N N N,表示了有 N N N 个同学。

  • 37
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 58
    评论
评论 58
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贤鱼不闲

一分钱也是爱!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值