临汾山东漯河饰品美体美文
投稿投诉
美文创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品
漯河衢州
兴义眉山
桂林阳泉
玉溪简阳
山东遂宁
永城新余
梧州洛阳
泸州温州
临汾清远
营口常熟
浙江大连
桐乡宜昌

让你的代码更加优雅的编程技巧跳转表

1月1日 霸王亭投稿
  跳表比较好理解,但是实际用代码来表示,还是有点复杂的。
  实现的方法不唯一1。什么是跳表
  跳表是链表索引的一种数据结构,是以空间换取时间的方式,关于跳表参考:https:baike。baidu。comitem跳表22819833?fraladdin2。跳表概念
  跳表在原有链表的基础上,增加索引,从而可以进行二分查找,提高搜寻效率。
  原始链表Head18122355NULL
  新增了索引的链表(跳表)Head28NULLHead1823NULLHead018122355NULL
  Head0,Head1,Head2上都是真实的节点,这就是以空间换取时间
  例如算上Head,元素数据一共有6个,而添加索引后,元素一共有11个3。跳表增删查规则
  3。1跳表数据节点
  数据节点可以和链表节点一致,也可以定义如下节点,除了数据外,有指针指向前一个后一个上一个下一个节点,以便后续查找操作。typedefstruct{structN后一个节点structN前一个节点structN上一个节点structN下一个节点}N
  3。2跳表初始化
  当跳表有多少层的时候,应当建立多少个头结点,例如:跳表为3层Head2NULLHead1NULLHead0NULL3。3查找
  删除新增都会进行查询才操作,无非是删除新增索引而已。
  例如有如下数据Head223NULLHead1823NULLHead018122355NULL
  要查找13这个节点
  去除无效层
  例如:Head2后面第一个节点的数据23,而23大于13,所以Head2没有数据匹配查询,故需要跳到下面一层,至Head1上进行查询。
  查询至Head0层
  去除无效层后数据进入了Head1,在Head1上进行匹配,当匹配到23时,23大于13,将23标记为查询结束点,对23的上一个节点8进行向下指针操作,进入Head0层的8节点。
  查找实际数据
  从Head0层的8进行查找,直至查询结束标记点(head123),查询的数据分别为8,12,23查询结束,未找到数据。
  嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!
  无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。
  点击这里找小助理0元领取:嵌入式物联网学习资料(头条)
  3。4新增
  新增操作需要记录索引寻址过程,以便后续新增索引。
  头结点插入
  头结点插入一定是去除无效层至Head0,且Head0的第一个节点都比插入节点要大的情况下
  例如:
  如下跳表,插入2Head223NULLHead1823NULLHead038122355NULL
  尾结点插入
  头结点插入一定是去除无效层至Head0,且Head0的第一个节点都比插入节点要小,直至NULL节点的情况下
  例如:
  如下跳表,插入65Head223NULLHead1823NULLHead038122355NULL
  中间节点插入
  除开以上2种情况,其余情况为中间节点插入
  新增索引
  抛硬币的方法,当数据量达到一定规模的时候,一定是趋近于50的。
  所以跳表会越来越趋向于如下形式33713579123456789
  判断是否需要新增索引,采取抛硬币的方法来判断,即:随机数取余为0则需要新增,否则不需要。
  例如如下跳表,插入65Head223NULLHead1823NULLHead038122355NULL
  寻址应该为
  Head2:23
  Head1:23
  元素数据插入后为Head223NULLHead1823NULLHead03812235565NULL
  当插入65节点后,若判断需要索引的时候,则先为Head1添加索引,添加位置为寻址地址之后,寄Head1:23Head223NULLHead182365NULLHead03812235565NULL
  继续判断,若不需要添加索引,则插入结束
  若还需要添加索引,则继续上述操作,直至索引层达到最高层
  3。5删除
  删除首先是查找操作【3。3查找】
  若未找到该节点,则删除失败
  若找到了该节点,则应当提到该数据最高索引层,再从高到低删除
  例如:
  如下跳表,删除23Head223NULLHead182365NULLHead03812235565NULL
  找到Head023后,应该向上找到Head223,然后从高向低删除,若删除后,该索引没有数据了,则索引层减1
  则删除Head223后数据如下Head182365NULLHead03812235565NULL
  删除Head123后数据如下Head1865NULLHead03812235565NULL
  删除Head023后数据如下Head1865NULLHead038125565NULL4。代码
  skipList。cincludestdio。hincludestdlib。hincludestdbool。hintMaxLevel8;最大层数intcurrLevel0;当前层数数据节点typedefstruct{structNstructNstructNstructN}N记录索引寻址过程typedefstruct{structN}skipS判断是否需要新增索引,抛硬币boolrandNum(){if(0(rand()2))}新增节点booladd(NodeSL〔〕,intdata){printf(新增节点:d,data);intlevelcurrLNodeHeadNULL;NodetmpNULL;NodelastNULL;初始化索引数据为Head地址skipStepsteps〔MaxLevel〕;for(i0;iMaxLi){steps〔i〕。level0;steps〔i〕。nodeSL〔i〕;Nodesssteps〔i〕。}赛选无效层HeadSL〔level〕;tmpHwhile((level0)(datatmpdata)){HeadSL〔level〕;tmpH}根据索引寻找Head0数据节点while((level0)){while(tmp!NULL){if(datatmpdata){steps〔level〕。if(NULL!last)steps〔level〕。}}if(NULLtmp){steps〔level〕。if(NULL!last)steps〔level〕。}}Head0数据合适的节点while(tmp!NULL){if(datatmpdata){}}新增节点NodenewData(Node)malloc(sizeof(Node));newDnewDataupNULL;newDatadownNULL;newDatalastNULL;newDatanextNULL;intk0;Head0插入原始数据if(NULLlast){头结点HeadSL〔0〕;NodeheadNextHif(NULL!headNext){newDatanextheadNheadNextlastnewDnewDatalastH}HeadnextnewDnewDatalastH}elseif(NULLtmp){尾节点lastnextnewDnewD}else{中间节点newDtmplastnewDnewDlastnextnewD}构建索引while(randNum()){k;if(kMaxLevel)新增索引数据NodenewIndex(Node)malloc(sizeof(Node));newInewIndexupNULL;newIndexdownNULL;newIndexnextNULL;newIndexlastNULL;建立上下级关系newIndexdownnewDnewDataupnewINodenodesteps〔k〕。nodenextNodenextInodenextnewInewInewIndexnextnextIif(NULL!nextIndex)nextIndexlastnewInewDatanewI判断是否需要新增索引层数if(kcurrLevel)currL}}初始化头结点NodeinitSkipList(NodeskipList〔〕){for(i0;iMaxLi){NodenewHead(Node)malloc(sizeof(Node));if(NULLnewHead){printf(d层头结点申请失败);returnNULL;}newHeaddata1i;newHeaddownNULL;newHeadupNULL;newHeadnextNULL;newHeadlastNULL;skipList〔i〕newH}returnskipL}打印跳表数据voidPrintSkipList(NodeSL〔〕){if(NULLSL){};intlevelcurrLintlevelMaxLfor(i0;i){NodeHeadSL〔i〕;NodetmpHprintf(第d层,i);while(NULL!tmp){printf(d,tmpdata);}printf();}}查询数据Nodequery(NodeSL〔〕,intdata){printf(查询数据:d,data);intlevelcurrLNodeHeadNULL;NodetmpNULL;NodelastNULL;HeadSL〔level〕;tmpHintendQuery1;筛除无效层while((level0)(datatmpdata)){endQHeadSL〔level〕;tmpH}根据索引定位到Head0层while((level0)){while(tmp!NULL){if(data(tmpdata)){endQ}}if(NULLtmp){endQuery1;}}查询实际数据while(NULL!tmp){if(endQuery!1)if(tmpdataendQuery){tmpNULL;}if(tmpdatadata){}}返回查询的数据节点,若没有查询到,应当返回NULL,否则返回实际的地址}删除数据booldel(NodeSL〔〕,intdata){printf(删除数据:d,data);找到节点地址Nodetmpquery(SL,data);if(NULLtmp){printf(未找到节点,删除失败);}intlevel0;NodetlastNULL;NodetnextNULL;找到该数据最高索引while(NULL!tmpup){}由上至下删除索引数据while(tmp!NULL){Nif(tlastNULL){printf(上一个节点不可能为空,删除失败,层数:d,level);}if(NULL!tnext)elsetlastnextNULL;if((tlastSL〔level〕)(NULLtnext)){currL}free(tmp);}}intmain(){NodeSL〔MaxLevel〕;NodeskipListinitSkipList(SL);if(NULLSL){printf(skipList申请失败);return1;}测试新增intnum〔〕{1,3,2,10,8,9,22,30,29,120,99,78,55,76,21};for(i0;isizeof(num)sizeof(int);i){add(skipList,num〔i〕);}PrintSkipList(SL);测试删除intdelNum〔〕{99,9,78,55,3,1,28,78};for(i0;isizeof(delNum)sizeof(int);i){del(skipList,delNum〔i〕);}PrintSkipList(SL);printf();return0;}
  执行结果gccskipList。cwg。a。out新增节点:1新增节点:3新增节点:2新增节点:10新增节点:8新增节点:9新增节点:22新增节点:30新增节点:29新增节点:120新增节点:99新增节点:78新增节点:55新增节点:76新增节点:21第5层99第4层99第3层7699第2层97699第1层392930767899第0层12389102122293055767899120删除数据:99查询数据:99删除数据:9查询数据:9删除数据:78查询数据:78删除数据:55查询数据:55删除数据:3查询数据:3删除数据:1查询数据:1删除数据:28查询数据:28未找到节点,删除失败删除数据:78查询数据:78未找到节点,删除失败第3层76第2层76第1层293076第0层28102122293076120
  END
  文章链接:https:mp。weixin。qq。comsdDmuTosbtBHVd4Z5umw
  转载自:技术让梦想更伟大
  文章来源:让你的代码更加优雅的编程技巧跳转表
  版权申明:本文来源于网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。
投诉 评论 转载

马卡C罗即将和利雅得胜利达成协议,2年半合约每年2亿收入根据马卡报著名记者JosFlixDaz(说不好T几)的最新报道,克里斯蒂亚诺罗纳尔多即将与来自沙特阿拉伯的利雅得胜利达成协议。这份合同将为两年半的合同,合同金额为每个赛季……买手机建议一步到位,目前只有这4款手机符合要求,能用到202如果您喜欢,可以点击上面的关注二字。后续会为您提供更多有价值的内容。买手机建议一步到位,目前只有这4款手机符合要求,能用到2025年。第一款:OPPOFindX5性……手机巨头砍单,芯片供应链危矣今年以来受到通膨升温、俄乌战争、中国大陆封控等三大因素影响,全球手机产业正陷入销售疲软、库存去化龟速的窘境,让苹果、三星两大智能手机巨擘相继传出减产,市场预料明年陆系手机厂也很……602落后洗剪吹,中国种子选手全军覆没?继德国大师赛10名种子选手爆冷无缘正赛后,正在进行的苏格兰公开赛也成为爆冷温床,目前已有4位TOP16出局,其中包括世界第9赵心童。今晚,中国TOP16独苗颜丙涛披挂上阵,连输……去南京旅游,有2个不习惯让游客忍不住吐槽,太难受了相信大家和朋友之间相聚外出玩耍时,肯定会去一些旅游景点,比如一起去登山看风景,或是去一些少数民族生活的地方旅游,体感一下当地不同的特色。有条件和爱好冒险的伙伴,还可以去高地探险……2023年吉林省城乡居民医保缴费即将截止!您的医保缴费了吗?2023年度吉林省城乡居民基本医疗保险缴费即将截止,您和家人的城乡居民基本医疗保险缴费了吗?集中缴费期截至今年12月31日,逾期补缴会有90天待遇享受等待期。如果还没有缴费,那……华为回应火腿测出血氧极小概率失误,将继续优化算法近期,消费者对于血氧测量的需求直线攀升,在血氧仪面临断货的情况下,智能穿戴设备的血氧检测功能就成为了用户的救命稻草。但不少网友都在日常生活中发现华为手表甚至可以测量火腿、……蒲公英的约定霍睿丨培育钻石珠宝首饰跨界设计大赛获奖作品由广州钻石交易中心主办的第一届LGDIDIC培育钻石珠宝首饰跨界设计大赛,以培育钻石为主题,旨在发掘颠覆传统的非凡力量,鼓励创新、跨界破圈,推动培育钻石行业的多元发展,探索拓展……让你的代码更加优雅的编程技巧跳转表跳表比较好理解,但是实际用代码来表示,还是有点复杂的。实现的方法不唯一1。什么是跳表跳表是链表索引的一种数据结构,是以空间换取时间的方式,关于跳表参考:https:……中超4消息武磊喜迎新帅,泰山新援盼夺金靴,海港官宣冯劲加盟第1个消息,关于武磊!近日,西甲劲旅西班牙人官方宣布,迭戈马丁内斯担任球队的主教练,任期2年!据了解,这是武磊加盟鹦鹉军团3年半以来,经历的第7任主帅,所以不少球迷也是调……但斌最新发声!目前仓位10,三四季度或有大机会,将重点投向这近日,东方港湾投资董事长但斌在一场客户交流会上,回顾了过去一年的操作,对下一阶段投资进行了展望,这是但斌减仓事件后少见的公开对外交流发声。但斌坦言,过去一年产品做的不好,……世上最浪漫的事,就是和你一起慢慢变老(一)郝有花(图片来自网络)我在秋雨里荒了一季年华当青丝染上白发灵魂走进十号当铺才发现寻了那么久,找错了方向误了流年,蓦然转身你就在我身后,……
又菜又装?2米18大中锋,空篮玩花活上飞,辽宁球迷十分想念小不容易啊,30,女排世界第9告别4连败,迎来首胜,欢欣鼓舞庆英特尔不再挤牙膏,光刻机时刻准备就绪,其他巨头开始着急了飘逸潇洒足球历史最强长发阵容,长发飘飘的也可能是球王退休以后出门旅行,要轻装出行,做到这八不带做一个普通人,遵守四大天规40岁的男人穿西装,不要太死板!跟谢霆锋学混搭,酷帅又有型梅西未来退出国家队,阿根廷的10号球衣会给谁?可更换轴体RGB灯效三模连接这款大众消费机械键盘诚意满满(经济)佛手果铺就乡村振兴之路去朝鲜旅行,当地美女导游又漂亮又有钱,怪不得这么多人想去窝里横外面怂的孩子,多出生于这两种家庭,根源都在爸爸身上香港电影女神林黛,出生于广西南宁,高贵气质却为何红颜薄命?加油站工作总结回门宴新郎致辞冬至停下你夹饺子的手!先把这篇推文看了再吃消失10年,43岁引爆热搜曾被大S欺负24年,如今她活出奇遇在农村住宅被人侵占怎么办老屋的枣树介绍电冰箱惠州猪肉排骨价格今日价明朝皇帝一共有多少位?明朝皇帝列表及简介是什么?白兰瓜的田间管理关于买房,二手房公寓大揭秘

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找