《算法通关指南:数据结构和算法篇 --- 链表相关算法题》--- 1. 队列安排,2.约瑟夫问题

🔥小龙报:个人主页

🎬作者简介:C++研发,嵌入式,机器人方向学习者

❄️个人专栏:《C语言》 《算法通关指南 》
永远相信美好的事情即将发生

文章目录


前言

本专栏聚焦算法题实战,系统讲解算法模块:以《c++编程》,《数据结构和算法》《基础算法》《算法实战》 等几个板块以题带点,讲解思路与代码实现,帮助大家快速提升代码能力ps:本章节题目分两部分,比较基础笔者只附上代码供大家参考,其他的笔者会附上自己的思考和讲解,希望和大家一起努力见证自己的算法成长

一、队列安排

1.1题目

链接:队列安排

1.2算法原理

频繁的在某一个位置之前和之后插入元素,因此可以用双向循环的链表来模拟。

1.3代码

c 复制代码
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int pre[N];
int ne[N];
int mp[N]; // mp[i] 表⽰ i 这个同学是否已经出队

int main()
{
	int n;
	cin >> n;

	ne[0] = 1;
	mp[1] = 1;
	for (int i = 2; i <= n; i++)
	{
		int k, p;
		cin >> k >> p;

		if (p == 0)
		{
			pre[i] = pre[k];
			ne[i] = k;

			ne[pre[k]] = i;
			pre[k] = i;
			mp[i] = 1;
		}
		else if (p == 1)
		{
			pre[i] = k;
			ne[i] = ne[k];

			pre[ne[k]] = i;
			ne[k] = i;
			mp[i] = 1;
		}
	}


	int m;
	cin >> m;

	for (int i = 1; i <= m; i++)
	{
		int x;
		cin >> x;

		if (mp[x] == 0)  // 如果 x 已经被删除,忽视这条指令 
			continue;

		ne[pre[x]] = ne[x];
		pre[ne[x]] = pre[x];
		mp[x] = 0;
	}

	for (int i = ne[0]; i; i = ne[i])
		cout << i << " ";
	return 0;
}

二、约瑟夫问题

2.1题目

链接:约瑟夫问题

2.2算法原理

使用循环链表模拟即可。

2.3代码

c 复制代码
#include <iostream>
using namespace std;
const int N = 110;
int ne[N];

int main()
{
	int n, m;
	cin >> n >> m;

	// 创建循环链表
	for (int i = 1; i < n; i++)
		ne[i] = i + 1;
	ne[n] = 1;

	// 模拟约瑟夫游戏的过程 
	int t = n;
	for (int i = 1; i <= n; i++)  // 执行n次出圈操作
	{
		for (int i = 1; i < m; i++)  // 让 t 向后移动 m - 1 次
			t = ne[t];

		cout << ne[t] << " ";
		ne[t] = ne[ne[t]];
	}
	return 0;
}

总结与每日励志

摘要: 本文分享了两个链表相关的算法实战题目:《队列安排》和《约瑟夫问题》。 队列安排:通过双向循环链表模拟学生插入和删除操作,使用pre和ne数组维护前驱与后继关系,高效处理动态调整。 约瑟夫问题:利用循环链表模拟游戏过程,每次移动m-1次后删除节点,直至所有节点出圈。 代码简洁高效,适合算法初学者练习链表操作。文末附励志语句,鼓励坚持学习。 关键词:双向链表、循环链表、算法实战、动态模拟

相关推荐
MZ_ZXD0015 分钟前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·vue.js·spring boot·python·django·php
人道领域18 分钟前
AI抢人大战:谁在收割你的红包
大数据·人工智能·算法
TracyCoder12337 分钟前
LeetCode Hot100(34/100)——98. 验证二叉搜索树
算法·leetcode
A尘埃37 分钟前
电信运营商用户分群与精准运营(K-Means聚类)
算法·kmeans·聚类
2的n次方_44 分钟前
Runtime 执行提交机制:NPU 硬件队列的管理与任务原子化下发
c语言·开发语言
A星空1231 小时前
一、Linux嵌入式的I2C驱动开发
linux·c++·驱动开发·i2c
零售ERP菜鸟1 小时前
范式革命:从“信息化”到“数字化”的本质跃迁
大数据·人工智能·职场和发展·创业创新·学习方法·业界资讯
凡人叶枫1 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
power 雀儿2 小时前
掩码(Mask)机制 结合 多头自注意力函数
算法
会叫的恐龙2 小时前
C++ 核心知识点汇总(第六日)(字符串)
c++·算法·字符串