范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

双链表的基本操作

  什么是双链表?
  双链表是在操作系统中常用的数据结构,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱,其结点组成如下:
  其示意图举例如下:
  双链表的操作示例
  1、双链表结点定义:/* 数据元素类型 */ typedef int Type; ​ /* 双链表结点结构体 */ typedef struct _DListNode {     struct _DListNode * prior; /* 指向直接前趋结点 */     struct _DListNode * next;  /* 指向直接后继结点 */     Type data;                 /* 数据           */        }DListNode;
  2、相关操作示例/* 函数声明 */ static DListNode *dlist_create(void); static int dlist_find(DListNode *dlist, Type find_data); static DListNode *dlist_change(DListNode *dlist, int pos, Type new_data); static DListNode *dlist_insert(DListNode *dlist, Type insert_data, int pos); static DListNode *dlist_delete(DListNode *dlist, Type del_data);  static void dlist_print_int(DListNode *dlist);
  (1)创建一个双链表: (5,2,0,13,14)
  示意图:
  代码:static DListNode *dlist_create(void) {     /* 创建第一个结点 */     DListNode *node = (DListNode*)malloc(sizeof(DListNode));       node->prior = NULL;     node->next = NULL;     node->data = list[0];          /* 创建头指针并指向第一个结点 */     DListNode *head = node;            /* 创建其它结点并链接成双链表 */     for (int i = 1; i < LEN; i++)     {         /* 创建新结点 */         DListNode *new_node = (DListNode*)malloc(sizeof(DListNode));             new_node->next = NULL;               new_node->prior = head;     /* 关键点1:新结点的prior指针指向前驱结点 */         new_node->data = list[i];                  /* 改变前驱结点的next指针指向 */         head->next = new_node;      /* 关键点2:前驱结点的next指针指向新结点 */                  /* 头指针后移 */         head = head->next;     }          return node; }
  (2)元素查找:static int dlist_find(DListNode *dlist, Type find_data) {     DListNode* temp = dlist;     int pos = 1;          while (temp)     {         if (find_data == temp->data)         {             return pos;          }         else         {             temp = temp->next;             pos++;         }     }          return ERROR; }
  (3)元素替换:static DListNode *dlist_change(DListNode *dlist, int pos, Type new_data) {     DListNode* temp = dlist;          for (int i = 1; i < pos; i++)     {         temp = temp->next;     }     temp->data = new_data;          return dlist; }
  (4)结点插入:头部插入:
  中间插入:
  尾部插入:
  static DListNode *dlist_insert(DListNode *dlist, Type insert_data, int pos) {        /* 创建新结点待插入 */     DListNode *new_node = (DListNode*)malloc(sizeof(DListNode));         new_node->next = NULL;     new_node->prior = NULL;     new_node->data = insert_data;          if (pos > LEN + 1)     {         printf("插入的位置错误! ");     }          /* 头部插入 */     if (1 == pos)     {         dlist->prior = new_node; /* 步骤1 */            new_node->next = dlist;  /* 步骤2 */         dlist = new_node;        /* 步骤3 */     }     else     {         DListNode *temp = dlist;         for (int i = 1; i < pos-1; i++)         {             temp = temp->next;         }         /* 中间插入 */         if (temp->next != NULL)         {             new_node->next = temp->next;    /* 步骤1 */             new_node->prior = temp;         /* 步骤2 */             temp->next->prior = new_node;   /* 步骤3 */             temp->next = new_node;          /* 步骤4 */         }         /* 尾部插入 */         else         {             temp->next = new_node;  /* 步骤1 */             new_node->prior = temp; /* 步骤2 */         }     }          return dlist; }
  (5)结点删除:static DListNode *dlist_delete(DListNode *dlist, Type del_data) {     DListNode *temp = dlist;          while (temp)     {         if (del_data == temp->data)         {             temp->next->prior = temp->prior;             temp->prior->next = temp->next;             free(temp);             return dlist;         }         temp = temp->next;     }          return dlist; }
  3、验证
  主函数:int main(void) {     printf("创建一个双链表:");     DListNode *dlist = dlist_create();     dlist_print_int(dlist); ​     printf("元素13所在的位置是:");     int pos = dlist_find(dlist, 13);     if (ERROR == pos)     {         printf("该元素不存在。 ");     }     else     {         printf("%d ", pos);     }          printf("把第1个位置的元素替换为2020得到新的双链表为:");     dlist = dlist_change(dlist, 1, 2020);     dlist_print_int(dlist);          printf("第2个位置插入888得到新的双链表为:");     dlist = dlist_insert(dlist, 888, 2);     dlist_print_int(dlist);          printf("删除元素2得到新的双链表为:");     dlist = dlist_delete(dlist, 2);     dlist_print_int(dlist);          return 0; }
  运行结果:
  最后
  以上就是本次分享的双链表的笔记,希望各位喜欢!如有错误欢迎指出。以上代码仅用于学习使用,可能没有那么完善、严谨,还望谅解。最后,如果可以的话,麻烦帮忙分享、转发、再看,谢谢。

金融科技赋能经济数字化转型,长三角金融科技学术论坛在沪举行6月23日,长三角金融科技学术论坛暨第二届长三角金融科技创新与应用全球大赛启动仪式,在上海华东师范大学举行。助力实现金融科技双向赋能,资源要素更高效的配置,进一步推动长三角地区金融全球首款洗衣机器人亮相,松下洗护发布会创多项业内领先目前,中国家电市场已从早期的增量市场阶段,过渡至如今的存量市场时代。消费需求从单纯的购买转为替换,加之疫情带来的市场变革,种种因素都对企业综合能力提出了更高的要求。6月29日,悦界今年春节人们爱吃啥?京东到家报告沙拉意面销量增速猛农历小年,京东到家数据研究院发布2021春节年货消费趋势报告(以下简称报告),达达集团旗下本地即时零售平台京东到家数据(1月16日至2月4日)显示,自1月16日京东到家年货节启动以诺尔集团进军下游制造业联手拼多多推出卫生巾新国货品牌纳可何成茂见客户时习惯带上一瓶蓝色的生理盐水。在需要说明产品力的环节,他会当场撕开一包纳可牌卫生巾,一边做与其他品牌的对比实验,一边解释,我们的吸收芯体非常特别,市面上普通的卫生巾,0京东到家发布春节六大消费热点成都最爱打麻将,深圳最爱打桌游春节已近尾声,2月17日大年初六,京东到家数据研究院根据京东到家春节消费数据(2月4日至2月16日),发布2021春节六大消费热点,从原年人云上拜年复工人有打工魂的亲情不减生活不易华为nova8se活力版即将发布华为近日宣布,将于27日发布nova8se活力版,一起捕捉智慧之美。还记得去年11月,华为发布了nova8se思考,时隔半年,nova8家族再添新机,不多说,直接上图捂脸小编寻思,多屏协同摸鱼神器?荣耀MagicBook14锐龙R7版体验暑期开始后,一直有朋友向我咨询有没有高性价比的笔记本电脑推荐。对于预算5K以下的用户,我都是一句话再等等吧,荣耀MagicBook2021锐龙款快推出了。犹记得初代的荣耀Magic阿里云未来智慧医院需要中台4月23日,在2021中华医院信息网络大会期间,阿里云副总裁谢维表示,基于数据的多形态中台在未来智慧医院的建设管理运营中必不可少。目前,公立医院高质量发展成为医疗机构发展的主旋律,背包里面的物品,应对不同需求,非EDC,因为是真的重背不动想想也有好久没有写一下包里面的东西了。距离上次写也过去了半年多的时间,这半年多的时间里面自己包里面的东西也更换或者添加了不同的,今天正好有时间,就写一下。首先这并不是EDC,包里面2021年购机推荐27英寸主流屏幕搭配2K分辨率,今期非它莫属对于热衷攒机的发烧友而言,动手组装电脑的快乐,就是打造高配置的电脑,提升视觉感官值,在电竞和办公时火力全开,尽享流畅不卡顿的操作。所以攒机时除了选好主机,还要挑选高配置的显示器。2大头君有点困无线有线音质都很棒的真无线蓝牙耳机可能看到标题的时候你会觉得我是写错了,说了无线和有线怎么又是真无线蓝牙耳机呢,别着急呀,今天给大家带来的就是来自BGVPQ2S的真无线蓝牙耳机,当时吸引的我就是这款耳机不仅可以当作
零代码开发,三步帮您搞定网站访问量统计流量为王的时代,对于互联网的产品,访问量的统计显得非常重要。流量会来自不同渠道不同平台不同端口,对于数据的分析又需要有不同的维度。因此,要专门开发一套访问量统计系统,无论是难度,还电商小卖家适合卖什么产品?所有搞运营的搞培训的都会跟大家说不要卖衣服鞋子,但是呢这些运营又会跟你说,秋冬流量来了刷起来把握住,但是除了衣服鞋子,其它产品跟秋冬流量有关系?卖百货的,家私的,五金的等等跟秋冬流电动车的火热将帮助这些芯片股起飞如果电动汽车销量继续上升,为汽车制造芯片的半导体公司有望看到巨大的利益。以下是高盛瑞银和摩根士丹利在该板选择的最热门股票。与内燃机汽车相比,电动车需要更多的芯片,而且是更复杂的芯片行情苹果华为小米OV五大品牌用户画像和你心里想的一样吗研究机构QuestMobile最近发布的一份2021年6月中国智能终端半年洞察报告数据里还有一组关于苹果华为小米OPPOvivo五大手机品牌的用户画像。报告里主要描述了四类用户群体预算三千买哪款智能电视?8月好价,这三款性价比拉满,可闭眼入当大屏电视成为了消费者选择的主流产品后,贪心的消费者又会在这个尺寸上再加上一个条件便宜,这样看来,市面上55英寸的智能电视无疑会是最好的选择。而在如今这个时间点,618年中大促已过2021年智能门锁一线品牌最新排名公布随着科技的进步,很多智能产品都走进了大家的生活,尤其是在智能安防系列中,从起初问世时候的智能密码锁,到现在的多功能。而全自动指纹锁是智能科技发展的产物,它更便于安装调试使用,同时更全屋智能家居欧瑞博MixPad精灵开关的应用场景看到这个,不得不夸一下MixPad精灵触屏语音开关的免安装设计。相比很多智能开关都需要零火线供电,MixPad精灵触屏语音开关则可以通过TypeC接口充电直接使用。所以,这个开关不日媒日本专业机构解剖华为高档智能手机中国产零部件占六成进步不小中国小康网8月31日讯老马在华为智能手机上,中国造零部件的采用出现激增。拆解华为支持5G的最新款智能手机,中国造的比率按金额计算达到约6成,相比旧机型翻了一番。在美国制裁仍持续的背沈子瑜亿咖通科技破圈向上,在智能化领域创造无限可能亿咖通科技沈子瑜说随着互联网与移动设备的普及,人们的生活已经进入了智能化时代,工作方式与生活方式也在发生着改变。而在智能化越发普遍的情况下,沈子瑜带领亿咖通科技破圈向上,在汽车智能手机空间不足拯救计划!分享四个手机储存空间清理的大家好我是非凡资源李李昨天给大家带来了几款电脑清理软件,今天来给大家带来四款手机的清理软件,每一款都值得拥有啊,而且实用的很那。不多说了开始吧一。安卓最强清理神器,清理君软件介绍安全屋智能家居欧瑞博细节展现品质这个开关的使用场景挺丰富的,可以说在家里任何地方都能用到。因为欧瑞博MixPad精灵触屏语音开关不仅能在墙面安装,还能搭配支架布置到任意位置,需要充电时用TypeC接口的线充电即可