小红数组操作(结构体模拟链表详细解析)(双向链表)c/c++

题目描述:

小红拿到了一个数组,初始数组为空,她希望你实现以下两种操作:
1 . 输入x,y,将x插入在元素y的右边。保证此时数组中没有元素等于x,且数组中存在一个y。特殊的,如果将x插入在数组的最左边,则y=0
2 . 输入x,将元素x删除。

请你在所有操作后输出整个数组。

先说一下结构体模拟链表的操作:
第一种操作 :将某一个元素b删除

想一想,b的右边的左边等于b的左边,例如 a b c,让b的左边也就是a指向b的右的左边边也就是c,从表示为:a→c,同时第二行,让b的右边也就是c指向b的左边的右边也就是a,表示为c→a,这样就把a和c连在了一起,相当于把b给删除了
局部代码如下:

cpp 复制代码
			lst[lst[b].r].l = lst[b].l;
			lst[lst[b].l].r = lst[b].r;

第二种操作 :把一个元素插在另一个元素的后面这里拿出一个把y插在x后面举例子:我们这里要实现x→y,首先,引入一个中间量temp作为桥梁

让temp先在x的右边,就是相当于把temp放在了中间,然后二三步实现xy的互相指向,让temp再指向y的右边,实现一个从头到尾的遍历
局部代码如下:

cpp 复制代码
			temp = lst[x].r;
            lst[x].r = y;
            lst[y].l = x;
            lst[y].r = temp;
            lst[temp].l = y;

遍历/存放链表 :

一个temp指针一直往右指,直到指到头为止

cpp 复制代码
	temp = lst[0].r;
	L sum = 1;
	while (temp != 0x3f)
	{
		ans[sum++] = temp;
		temp = lst[temp].r;
	}

本题代码如下

cpp 复制代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
typedef long long L;
using namespace std;
int n;
L temp = 0x3f;
struct Node {
	L l, r;
};
L ans[2000005];
//存答案
map<L, Node>lst;
//结构体模拟链表
int main()
{
	lst[0].r = 0x3f;
	//定义链表的初始
	lst[0x3f].l = 0;
	//初始化链表
	cin >> n;
	while (n--)
	{
		int a, b, c;
		cin >> a;
		if (a == 1)//插入
		{
			cin >> b >> c;
			temp=lst[c].r;
			lst[c].r = b;
			lst[b].l = c;
			lst[b].r = temp;
			lst[temp].l = b;

		}
		else//删除
		{
			cin >> b;
			lst[lst[b].r].l = lst[b].l;
			lst[lst[b].l].r = lst[b].r;

		}

	}
	//模拟输出链表
	temp = lst[0].r;
	L sum = 1;
	while (temp != 0x3f)
	{
		ans[sum++] = temp;
		temp = lst[temp].r;

	}
	cout << sum - 1<<endl;
	for (int i = 1; i <= sum - 1; i++)
	{
		cout << ans[i] << " ";
	}
	return 0;
}
相关推荐
代码游侠几秒前
学习笔记——GPIO按键与中断系统
c语言·开发语言·arm开发·笔记·嵌入式硬件·学习·重构
楼田莉子7 分钟前
Linux学习之库的原理与制作
linux·运维·服务器·c++·学习
保护我方头发丶17 分钟前
hard_link.bat(个人用)
c语言
浅念-18 分钟前
C++第一课
开发语言·c++·经验分享·笔记·学习·算法
你爱写程序吗(新H)21 分钟前
基于单片机的洗衣机控制系统设计 单片机洗衣机控制(设计+文档)
c语言·汇编·单片机·嵌入式硬件·matlab
charlie11451419122 分钟前
现代嵌入式C++教程:对象池(Object Pool)模式
开发语言·c++·学习·算法·嵌入式·现代c++·工程实践
HABuo24 分钟前
【linux进程控制(三)】进程程序替换&自己实现一个bash解释器
linux·服务器·c语言·c++·ubuntu·centos·bash
恶魔泡泡糖35 分钟前
51单片机I-O扩展1
c语言·嵌入式硬件·51单片机
一只小bit1 小时前
Qt 多媒体:快速解决音视频播放问题
前端·c++·qt·音视频·cpp·页面
凯子坚持 c1 小时前
C++大模型SDK开发实录(二):DeepSeek模型接入、HTTP通信实现与GTest单元测试
c++·http·单元测试