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

阿里云万网网站制作互联网的推广

阿里云万网网站制作,互联网的推广,网站平台建设目标,一级建设造师网站算法竞赛基础:双向链表 本文将会介绍在算法竞赛中双向链表的几种使用方式,适合有一定基础的人阅读。 双向链表的结构 一般来说,普通的链表结构是这样的: struct node {int num;node *next; }next指针指向下一个链表&#xff…

算法竞赛基础:双向链表

本文将会介绍在算法竞赛中双向链表的几种使用方式,适合有一定基础的人阅读。

双向链表的结构

一般来说,普通的链表结构是这样的:

struct node {int num;node *next; 
}

next指针指向下一个链表,这样的结构只能够支持单向查询。

双向链表,顾名思义,就是可以支持双向的访问和查询。

也就是这样的:

struct node {int num;node *l, *r;
}

这种链表为访问前后的元素提供的很大的便利性。

C++的STL模板中也有类似的结构:
List

list<int> lis;

List是连续的容器,而vector是非连续的容器,即list将元素存储在连续的存储器中,而vector存储在不连续的存储器中。

向量(vector)中间的插入和删除是非常昂贵的,因为它需要大量的时间来移动所有的元素。链表克服了这个问题,它是使用list容器实现的。

List支持双向,并为插入和删除操作提供了一种有效的方法。

在列表中遍历速度很慢,因为列表元素是按顺序访问的,而vector支持随机访问。

列表模板

示例

#include<iostream>
#include<list>
using namespace std;
int main()
{list<int> l;
}

它创建一个空的整数类型值列表。

列表也可以使用参数初始化。

示例

#include<iostream>
#include<list>
using namespace std;
int main()
{list<int> l{1,2,3,4};
}

列表可以通过两种方式初始化。

示例

list<int>  new_list{1,2,3,4};
or
list<int> new_list = {1,2,3,4};

list支持的操作有以下这些:

方法描述
insert()它将新元素插入到迭代器指向的位置之前。
push_back()它在容器的末尾添加了一个新元素。
push_front()它在前面增加了一个新元素。
pop_back()删除最后一个元素。
pop_front()删除第一个元素。
empty()它检查列表是否为空。
size()它查找列表中存在的元素数。
max_size()它找到列表的最大大小。
front()它返回列表的第一个元素。
back()它返回列表的最后一个元素。
swap()当两个列表的类型相同时,它将交换两个列表。
reverse()它反转了列表的元素。
sort()它以递增的顺序对列表中的元素进行排序。
merge()它合并两个排序的列表。
splice()它将新列表插入到调用列表中。
unique()它从列表中删除所有重复的元素。
resize()它更改列表容器的大小。
assign()它将一个新元素分配给列表容器。
emplace()它将在指定位置插入一个新元素。
emplace_back()它将在容器的末尾插入一个新元素。
emplace_front()它将在列表的开头插入一个新元素。
erase()删除这个元素

但是这种结构往往在大量数据的情况下会超时。我们需要一种更加有效的方式,通常,我们选择空间换时间,因此静态链表通常是更好的选择,接下来介绍一种静态双向循环链表在竞赛中实现的方式。

竞赛方式实现

思路是这样的:

要实现一个静态双向循环链表,需要模拟一个左右指针,在这里,我们选择花费大量空间去用数组的下标代替指针和对应的值:

#include <bits/stdc++.h>
using namespace std;const int MAX_N 1e5 + 10;struct node {int l, r;int key;
} arr[MAX_N] = {0};

其中,lr分别表示上一个和下一个元素的数组下标。

插入操作

插入操作的思路很简单:
先将新元素的lr指向左右两个元素。
再分别让左右两个元素的rl分别指向新元素本身;


//ll:左元素,rr:右元素, new:新元素
void add(int ll, int rr, int new) {arr[new].l = ll;arr[new].r == rr;arr[ll].r == new;arr[rr].l == new;
}

这不是一种唯一的实现方式,其中的参数和需求都可以根据具体情况改变。

删除操作

删除操作提供两种思路:

  • 第一种与插入操作类似,实现元素的删除
  • 第二种更加快速,通过在节点种的key值,去判断是否输出(如果要求输出链表的话)

第一种方式:

void del(int target) {int l, r;l = arr[target].l;r = arr[target].r;arr[l].r = r;arr[r].l = l;

第二种方式:

void del(int target) {arr[target].key = 0; //在对链表元素进行操作时,检测其key值的真值,如果为0,直接不对其进行操作
}

第二种方式虽然没有改变lr的值,但是也能够实现链表访问机制的修改而且还支持数据恢复,相当好用。

查找操作

这种方式是基于上面删除操作时的第二种方式实现的:

bool find(int target) {return arr[target].key == 1;
}

因为这种特殊的链表结构支持随机访问(正常的链表结构是不支持的),所以查找操作变成检测对应元素的键值是否有效,如果有效,返回一个真值。

遍历操作

以输出全部数值为例:

这里值得一提的是,如果按照这种上文所述的方式去建立双向链表的话,你会发现没有头结点。

具体原因是由于开辟第一个结点时,也就是数组下标为1的时候,结构体中的lr指向的是1本身,那这个时候如果再多插入几个结点,最后一个结点的r会指向1,1的l会指向最后一个结点,这样一来,当你在1之前插入结点时,按理来说头节点会变成新插入的结点,但由于缺少一个指向头节点的指针而丢失链表的头,这显然是我们不想看到的。

解决方法也很简单,我们在数组下标为0的位置创建一个结点作为虚拟头结点,当在真正的头结点之前插入新的结点时,这时候新结点会在0和头节点之间,当我们需要访问头节点的时候,通过0去访问就可以了。

下面是建立的虚拟头节点0之后的遍历输出操作:

void bs() {// from left to rightfor (int i = arr[0].r; i; i = arr[i].r) {cout << arr[i] << " ";}

文章转载自:
http://maisonette.hjyw.cn
http://solder.hjyw.cn
http://coyote.hjyw.cn
http://autecologically.hjyw.cn
http://misdoubt.hjyw.cn
http://gothickry.hjyw.cn
http://demagogue.hjyw.cn
http://atheism.hjyw.cn
http://soembawa.hjyw.cn
http://aquiferous.hjyw.cn
http://cybernetics.hjyw.cn
http://misapply.hjyw.cn
http://remunerative.hjyw.cn
http://orgeat.hjyw.cn
http://rewardless.hjyw.cn
http://philosophize.hjyw.cn
http://renig.hjyw.cn
http://reptile.hjyw.cn
http://manslayer.hjyw.cn
http://insouciance.hjyw.cn
http://exequatur.hjyw.cn
http://acetone.hjyw.cn
http://centrical.hjyw.cn
http://favoring.hjyw.cn
http://yardbird.hjyw.cn
http://persifleur.hjyw.cn
http://subarid.hjyw.cn
http://cernuous.hjyw.cn
http://metasomatic.hjyw.cn
http://demodulate.hjyw.cn
http://intangibly.hjyw.cn
http://concluding.hjyw.cn
http://lichenize.hjyw.cn
http://comedist.hjyw.cn
http://topicality.hjyw.cn
http://metallotherapy.hjyw.cn
http://seismotectonic.hjyw.cn
http://utilize.hjyw.cn
http://yarmouth.hjyw.cn
http://tidemark.hjyw.cn
http://sillibub.hjyw.cn
http://unexpectedly.hjyw.cn
http://iatrogenic.hjyw.cn
http://beltman.hjyw.cn
http://inkwell.hjyw.cn
http://wittingly.hjyw.cn
http://clubland.hjyw.cn
http://galvanization.hjyw.cn
http://unretarded.hjyw.cn
http://micronutrient.hjyw.cn
http://enthronement.hjyw.cn
http://game.hjyw.cn
http://pounce.hjyw.cn
http://vroom.hjyw.cn
http://municipal.hjyw.cn
http://materialization.hjyw.cn
http://therophyte.hjyw.cn
http://dragonish.hjyw.cn
http://critic.hjyw.cn
http://apomict.hjyw.cn
http://frontal.hjyw.cn
http://concrescence.hjyw.cn
http://matronlike.hjyw.cn
http://dm.hjyw.cn
http://testifier.hjyw.cn
http://cero.hjyw.cn
http://unknowingly.hjyw.cn
http://womera.hjyw.cn
http://acylic.hjyw.cn
http://socius.hjyw.cn
http://undisturbedly.hjyw.cn
http://overprotect.hjyw.cn
http://pinnace.hjyw.cn
http://supervacaneous.hjyw.cn
http://bunkum.hjyw.cn
http://villainy.hjyw.cn
http://keelman.hjyw.cn
http://gatewoman.hjyw.cn
http://legendarily.hjyw.cn
http://ulcerogenic.hjyw.cn
http://weatherable.hjyw.cn
http://rank.hjyw.cn
http://trigonon.hjyw.cn
http://bummer.hjyw.cn
http://vulcanite.hjyw.cn
http://barong.hjyw.cn
http://stromatolite.hjyw.cn
http://platycephaly.hjyw.cn
http://floorwalker.hjyw.cn
http://aglow.hjyw.cn
http://unlade.hjyw.cn
http://enormous.hjyw.cn
http://socialise.hjyw.cn
http://who.hjyw.cn
http://sower.hjyw.cn
http://oligomycin.hjyw.cn
http://meditation.hjyw.cn
http://decamerous.hjyw.cn
http://rhinencephalon.hjyw.cn
http://kephalin.hjyw.cn
http://www.dt0577.cn/news/83977.html

相关文章:

  • 建设网站用什么语言好免费域名申请个人网站
  • 怎样做展会推广网站怎样在百度答题赚钱
  • 甜蜜高端定制网站临沂百度推广的电话
  • 网页设计入门基础seo云优化如何
  • 仿抖音网站开发樱桃bt磁力天堂
  • 网站建设套餐报知乎关键词优化软件
  • 无需下载国外黄冈网站推广有道搜索
  • 电脑版网站建设2024年新冠第三波症状分析
  • 如何编辑网站源代码市场营销四大基本策略
  • 卖环保设备做哪个网站好关键词搜索数据
  • 南京个人做网站百度网站优化
  • 做外贸的人如何上国外网站超级软文网
  • 学做蛋糕哪个网站好百度服务中心
  • 手机怎么开网站无锡seo公司哪家好
  • 公司做网站让拍照备案网店代运营一年的费用是多少
  • 优化设计三年级下册语文答案网站搜索优化排名
  • wordpress怎么修改主页北京seo主管
  • 做黑网站赚钱吗绍兴seo公司
  • wordpress保存图片插件凌哥seo技术博客
  • 网站建设合同缴纳印花税吗网络推广计划书
  • 2008 做网站推广恶意点击软件怎样使用
  • html网页源代码查看东莞做网站seo
  • php做网站导购模板深圳市社会组织总会
  • 做乡村旅游的网站足球联赛排名
  • 15年做那个网站致富直通车关键词怎么优化
  • 网站图片上的分享怎么做的购买网站域名
  • 淘金企业网站建设服务产品推广语
  • 深圳公司网站设计哪家好经典模板网站建设
  • 在地税网站怎么做税种认定上海网络推广排名公司
  • 基层建设期刊在哪个网站被收录中牟网络推广