数据结构单链表表示的三种方法
对于线性表来说,总得有个头尾,头部做为基准地址,如数组的数组名,链表的头指针。尾部做为结束的标志,数组使用一个长度属性来标识数组的结束位置,字符串使用转义字符,链表使用NULL指针来标识结束位置。
我们知道,数组的全部元素是集中存储,数组的基准地址是第一个元素的地址,也就是数组名的值,其它元素的索引都是一个整型常量,对元素的访问就是基准地址相对于索引的偏移,所以数组元素可以随机访问。
链式存储是分散存储,通过节点的指针域来建立一个节点与其下一个邻接节点的联系。链式存储的头指针虽然也是整个链式数据结构的基准地址,但要找到某一节点,需要顺序访问,从头节点开始,顺着每一个节点的指针域的值,一个节点一个节点地挼。
我们把链表中第一个节点的存储位置叫做头指针,那么整个链表的存取就必须是从头指针开始进行了。之后的每一个节点,其实就是上一个的后继指针指向的位置。有时,我们为了更加方便地对链表进行操作,会在单链表的第一个结点前附设一个结点,称为头节点。头节点的数据域可以不存储任何信息,谁叫它是第一个呢,有这个特权。也可以存储如线性表的长度等附加信息,头节点的指针域存储指向第一个节点的指针。
头指针
头节点
1头指针是指链表指向第一个节点的指针,若链表有头结点,则是指向头结点的指针
1头结点是为了操作的统一和方便而设立的,放在第一元素的结点之前,其数据域一般无意义(也可存放链表的长度)
2头指针具有标识作用,所以常用头指针冠以链表的名字
2有了头结点,对在第一个元素节点前插入节点和删除第一节点,其操作与其它结点的操作就统一了
3无论链表是否为空,头指针均不为空。头指针是链表的必要元素
3头结点不一定是链表必须要素
是否使用头节点,在实现链表的常用操作时代码的写法稍有区别,使用头节点的方法代码较为简洁。同时,也可以将这个表头节点指针封装到一个结构体中,并在结构体中增加链表长度等信息。
1使用头节点的链表表示
加头结点的优点:
1)链表第一个位置的操作无需特殊处理;
2)将空表和非空表的处理统一。includestdio。hincludemalloc。htypedefstructNode{intdata;structNodenext;}Node,pNode;pNodecreateList()头节点是空节点{pNodehead(pNode)malloc(sizeof(Node));if(headNULL){printf(mallocfailed!);returnhead;}headdata0;headnextNULL;returnhead;}intinsert(pNodehead,intdata)头插法{pNodenewNode(pNode)malloc(sizeof(Node));if(newNodeNULL){printf(mallocfailed!);return1;}newNodedatadata;newNodenextheadnext;headnextnewNode;return0;}voidprintList(pNodehead){pNodecurheadnext;while(cur){printf(d,curdata);curcurnext;}}voiddestroyList(pNodehead){pNodephead;pNodeqpnext;while(q!NULL){free(p);pq;qpnext;}free(p);}intmain(){pNodeheadcreateList();for(inti0;i10;i)insert(head,i1);printList(head);destroyList(head);getchar();return0;}10987654321
2不使用头节点的链表表示includestdio。hincludemalloc。htypedefstructNode{intdata;structNodenext;}Node,pNode;intinsert(pNodehead,intdata)头插法,头部是一个实节点{pNodenewNode(pNode)malloc(sizeof(Node));if(newNodeNULL){printf(mallocfailed!);return1;}newNodedatadata;if(headNULL)newNodenextNULL;elsenewNodenexthead;headnewNode;return0;}voidprintList(pNodehead){pNodecurhead;while(cur){printf(d,curdata);curcurnext;}}voiddestroyList(pNodehead){pNodephead;pNodeqpnext;while(q!NULL){free(p);pq;qpnext;}free(p);}intmain(){pNodeheadNULL;for(inti0;i10;i)insert(head,i1);printList(head);destroyList(head);getchar();return0;}10987654321
3链表和链表节点用不同的结构体来表示
链表用一个结构体来描述,封装一个节点指针做表头,并增加一个链表长度变量,需要时也可以增加一个节点指针做表尾。includestdio。hincludemalloc。htypedefstructNode{intdata;structNodenext;}Node,pNode;typedefstructList{pNodehead;intsize;}List,pList;pListcreateList(){pListpl(pList)malloc(sizeof(List));if(plNULL){printf(mallocfailed!);returnpl;}plhead(pNode)malloc(sizeof(Node));if(plheadNULL){printf(mallocfailed!);returnNULL;}plheaddata0;plheadnextNULL;plsize0;returnpl;}intinsert(pListpl,intdata)头插法,头部是一个空节点{pNodenewNode(pNode)malloc(sizeof(Node));if(newNodeNULL){printf(mallocfailed!);return1;}newNodedatadata;newNodenextplheadnext;plheadnextnewNode;plsize;return0;}voidprintList(pListpl){pNodecurplheadnext;while(cur){printf(d,curdata);curcurnext;}}voiddestroyList(pListpl){pNodep(pl)head;pNodeqpnext;while(q!NULL){free(p);pq;qpnext;}free(p);free(pl);}intmain(){pListplcreateList();for(inti0;i10;i)insert(pl,i1);printList(pl);destroyList(pl);getchar();return0;}10987654321
End
记暑假里的一件事小学作文暑假虽然已经过去挺久了,但是在暑假生活中经理的许多事情中,总有让我特别难忘的事情,至今记忆犹新,下面就让我跟你分享分享吧!记得有一次,我去超市买东西回家时。忽然,一辆银白……
暑假计划作文为了让我暑假过得充实又愉快,我为自己制定了一个暑假计划。下面是暑假计划作文,欢迎阅读!暑假计划作文1暑假将要到来,鉴于我以往的暑假生活,今年,我决定要好好计划,过一个充实……
2022年04月13日星期三互联网日报2022年04月13日星期三市场监管总局:批准《电子烟》强制性国家标准,今年10月1日起实施2。交通运输部表示,对一刀切劝返、违规设置防疫检查点等严肃处理3。中国移……
门卫叔叔作文800字不管是烈日炎炎的夏天,还是寒风刺骨的冬天,在学校里,总会有一个勤劳的身影默默无闻地出现在同学面前mdash;mdash;这就是朴实的门卫苏叔叔。一天早晨,我背着书包精神抖……
神秘地下游泳池想象作文最近,我家旁边搬来了一个穿着白大褂的大叔,整天在研究科学,但是别人总是不知道他在干什么。一次周末,我怀着好奇心敲了敲大叔的门,门开了,却是一个阴森森的楼梯,不知通往哪里,……
图像设别在机械零件质量检测中的运用1机械零件质量检测中相关图像识别技术1。1模糊匹配识别技术这种识别方法属于一种最基础的识别技术,而其中所应用的模板所指的就是为能够对待识别零件图像中相关区域特征进行……
如歌般的校园生活作文如果真的是你,那么我就把这首歌献给你。我将附在你耳边亲昵地告诉你,这首歌的旋律,我还要轻轻地告诉你这首歌的大意。我要告诉你的是,这首歌的旋律就是你,它优雅,欢快,昂扬,就……
晓出净慈寺送林子方改写成作文清晨的时候,空气中还弥漫着一些雾气,能见度还不到一百米。诗人杨万里送他的。好朋友林子方回家。他们俩一路上低着头沉默不语,希望这样可以掩盖住自己心中对对方的不舍之情。虽然是……
足球赛三年级作文450字叮叮叮放学了,同学们从学校一窝疯的来到一块踢足球的好地方,用书堆了一个球门,就分成了两队。路过的弟弟妹妹们和一位叔叔被这一场球赛吸引住了。看,那个留平头的小守门员,他警惕……
品味成长记叙作文800字精选范文成长是什么?成长是小苗长高,茁壮挺拔;成长是什么?成长是花苞绽放,美丽动人;我们的成长又是什么呢?下面和小编一起来看看品味成长记叙作文怎么写吧,欢迎阅读!品味成长记叙作文篇一……
怎样才能获得快乐初中生作文快乐在哪里?快乐在那二月的春风里;快乐在那美妙的歌声里;快乐在那皎洁的明月里。在敢于追求中获得快乐。蝴蝶在空中起舞,它一直拥有一个梦想,就是寻找到属于自己的世外桃源。……
我有一盏小台灯E度网专稿未经允许不得转载我有一盏小台灯,是爸爸从石家庄买来的,我非常喜欢它。它的底座是一只黄色的小狗,小狗有两只红红的眼睛,长长的耳朵垂在两边,鼻孔的是两个小点,……
零花钱大作战四年级作文各位亲爱的家长,当你的孩子在家伸手要零花钱的。时候,当你每次给孩子零花钱,孩子一下就花完的时候。您该怎么办?应该从小就教育孩子:钱是来之不易的!教育办法5种,下面在此向您……
花十几万买车跑滴滴到底值不值?谣零零计划最近看到很多朋友说,花十几万买车去跑滴滴网约车的人,肯定是脑子有问题。那么针对这种言论,我在网上也看到过很多,其实每个人有自己的想法,这个很正常。但是换个……
小白兔我家有三只小白兔。它们长着一对长长的耳朵,听力很敏锐,一双红宝石似的眼睛像镶在洁白无瑕的玉里。一只像小球的小尾巴,走起路来跳来跳去的。它全身的毛雪白雪白的,在冬天里你从远处看还……
学会坚强读后感作文一个人并不是生来就要给打败的,你尽可以消灭他,却不能打败他。读完了海明威著的《老人与海》后,这句发人深思的话一直在我的脑海里飘荡,久久没有平息下来。这篇文章写了一个老头儿……
小学生有关春游的作文400字春游有利于释放压力,放飞心情。下面是小编整理的春游作文400字,欢迎阅读。第一篇:春游今天我们在老师的带领下高兴地走在春游的路上。首先我们来到了大塘,大塘的风……
激动人心的亚运会开幕式作文在广州美丽的珠江上,有一个美丽的小岛;在这美丽的小岛上,将进行一次别开生面的亚运会开幕式。当广播里响起了主持人圆润的嗓音时,全场人民,乃至全中国人民都沸腾了!五彩缤纷的烟……
如何用一见钟情造句以下是关于一见钟情的造句,希望品学网小编整理的对你有用!语文要培养遣词造句的能力,要用慧眼捕捉课文遣词造句背后的精彩。一见钟情的造句:1、相信一见钟情的爱情,相信总……
福建省红十字会红博云智慧应用平台正式启用福建省红十字会红博云智慧应用平台正式启用。红博云智慧应用平台纳入数字福建建设整体规划,是采用云计算、大数据、区块链等技术建设的红十字会综合业务一体化管理平台。该平台通过一个平台……
构建产业发展最佳格局新能源汽车热潮仍在持续,未来的赛道还很长。处于上升期的锂电产业,受到政府和市场的双重青睐。在行业保持高景气运行背景下,更应理性思考如何构建完整而稳定的产业链。这是一个地区在良性……
一副秋天的图画作文三年级上册第三单元作文500字一副秋天的图画秋天到了!繁花似锦、瓜果飘香、五谷丰登,到处都是一幅幅丰收的美景。我来到果园,看到苹果露出了红红的脸颊,梨树挂起了金黄色……
纠结!给老人买,荣耀x10x20x30哪个性价比高?性能方面,荣耀X10采用麒麟820处理器,荣耀X20采用天玑900处理器,荣耀X30采用骁龙695处理器,在Geekbench5测试中荣耀X10单核得分635分,多核得分243……
三克砖,无尽的爱又是一个暖意四溢的午后,刚下了课的我,慵懒地躺在椅子上,享受着阳光的洗礼。可回头一望书桌上那一打数学卷子,心中的惬意顿时烟消云散。唉,谁叫咱是数学老师呢。无奈地翻开卷子,……