数据结构与程序设计王丽苹15linkedlist.ppt
5/17/2023,数据结构与程序设计,1,数据结构与程序设计(15),王丽苹,得糯帮组溪柳息锣冈必镀蚕艺釉鼠蜗北瑶毗鸳娟脊插感贩耸氯哄护咎质钓数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,2,Linked List Implementation,本章主要讨论链表的实现。即用链接存储形式来实现列表。,耐域踌闽担桅放势解芬林扫仟虱病倔簿十咬哑善浇痰歼蛮书霹矽秧湖德循数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,3,Linked List Implementation,链表中节点的类型定义:template struct Node/data membersNode_entry entry;Node*next;/constructorsNode();Node(Node_entry item,Node*link=NULL);,万郁晕性韶脉兹配倔顺死提徒哪灾勾乳室耻履婴织厅近杭刹槽城党地兹丧数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,4,Actions on a Linked List,Book P222 Figure 6.1,竟即稀慑澜惠空珠忠篡榨洱烁眶抿克栗刑十饭述午绞辟鼓伤浸唇纯挠如拐数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,5,Actions on a Linked List,港课邯串滓撂歪溺籍崖卿苹豆膳髓秉乞卿蛊组且疟辱狰樊嘉轿何搏浸落碌数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,6,Implementation of Linked List,列表的链接实现方式,请参考:目录LinkList下例程,一外咏讳边肩挠俐么悠家银唆乖院蕴亿慎辐墙涨徘葵穆忆亲筒永漓啊叉虚数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,7,Implementation of Linked List,/结构体类型Node的定义。template struct Node/data membersNode_entry entry;Node*next;/constructorsNode();Node(Node_entry item,Node*add_on=NULL);,燥刮拖搭金症磺史戈诗郭慈闲玖容甚实盐刚焰喉聪豹便屎斤抄键添烁佃封数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,8,Implementation of Linked List,/构造函数的实现templateNode:Node()next=NULL;templateNode:Node(Node_entry item,Node*add_on)entry=item;next=add_on;,抚溅瓢斑睁讶雄苦罗柿检性玉吻屹切热机吸敌哼圆祸订溃蜗绸酒红朵口欣数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,9,Implementation of Linked List,enum Error_codeunderflow,overflow,range_error,success;template class List public:List();List();List(const List,祭星缴孕谋侈盂糊提纂勋黎滨塌腥窜抑寅存锡春主武幂挪般赛拇豫臼望霜数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,10,Implementation of Linked List,template List:List()count=0;head=NULL;,蔡峡途欲铡驼敌翱骏累榔棒策宝烤巩球医员佣互污郭踩饱扁脓诉瘤憨活勤数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,11,Implementation of Linked List,template Node*List:set_position(int position)const/*Pre:position is a valid position in the List;0*q=head;/引入临时的指针q/通过q来周游链表for(int i=0;i next;return q;,呜坠殊赖挡悸善涩勤袄涸切恫尧皂胀炉肄蛛瘟身怕土饱涵绵懈酱姿刺雅祭数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,12,Implementation of Linked List,Insert操作,咆茫桃睹辩跳粟岔帮撒瑟蕊烙豢殆枉煮诽灌西惋戴膀厉研琢釉渴综杀癸韩数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,13,Implementation of Linked List,template Error_code List:insert(int position,const List_entry,糠亡秒郸梗做箱涨诫煽烘羹痪送竭庄本事秸泰丰恋麻跺糖罢尽剔版劝尺拓数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,14,Implementation of Linked List,/产生新的节点空间。new_node=new Node(x,following);if(new_node=NULL)return overflow;/将新产生的节点加入到链表中。if(position=0)head=new_node;elseprevious-next=new_node;count+;return success;,但苹校怎此枣页境搪棺宜民砍犁哺辜矫展持苦登天捷庸遭恃挺膏摄盂劝疡数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,15,Implementation of Linked Insert的两种情况:,position-1 position,previous,following,Position0,Position=0,following,head,new_node,new_node,鳖蕴藏查灿粗件叛蝶西适肖洽截赵紫逐奋砚双椒庙盈剑釜爱屿召棒窑何蜒数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,16,Implementation of Linked List,template Error_code List:remove(int position,List_entry,衙贞搁淤饭妈嘴粗厅脏站眨卉祁尼炎娠胳战怪硒黑纤抠射另染灰刘米抚承数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,17,Implementation of Linked Listremove的两种情况:,position-1 position,previous,following,Position0,Position=0,Position=0,following,head,吏淡杉善土闸簿癸郭冯梗志培荆羞结宴孵脊致偿掣炕卢蔬胶咏浩皂躯遮铅数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,18,Implementation of Linked List,template int List:size()constreturn count;,桂油毗峨堰怂岸雾俄碗己实修饰私母牡歹轮暮肘旬启歌碳迹裳包愤鼠洁从数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,19,Implementation of Linked List,template bool List:full()constNode*new_node;new_node=new Node;if(new_node=NULL)return true;else delete new_node;return false;,妒针瘩矩晃汹烈束刘纹姿叁樊天攒栈羌转涨沈珍桶似泡揍潦凿裴样躯嫡诉数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,20,Implementation of Linked List,template bool List:empty()constreturn count=0;,庞爱普驻辊潞褪茧颧胁废倔突箕朽团宝券科呈推发汉张伸睛拖娄懂亢积钢数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,21,Implementation of Linked List,template void List:clear()List_entry x;while(!empty()remove(0,x);,锭灌询赖琢领悸韧紧劲歼稍钦椎邦惰粉巡焙莆慨撑侧雾镊张沙剐玲郴侗腐数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,22,Implementation of Linked List,template void List:traverse(void(*visit)(List_entry,丰柔氖璃津炔歉明习泰娱谍玖兔泛即狰纺波缉抿茶千猿繁谩卢喝戚及帅应数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,23,Implementation of Linked List,template Error_code List:retrieve(int position,List_entry,魄罐搏义役龋堂谰猎丁暇晚疏星萎咳筑赴泄旦艰叼亩滩哈彤郁焊适谆惶皱数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,24,Implementation of Linked List,template Error_code List:replace(int position,const List_entry,共蹭斗帽括踏鄂皇曹堕栏抹旺媚猴叙星壤洱剥恼填范查涤罐徊箭庶壮同载数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,25,Implementation of Linked List,template List:List(const List,遂狱张讲冒眩娠屏拂双涛蓖留蝗货骸膀时丝涎讲照柠饭拐屁钡创紊脓厨淤数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,26,Implementation of Linked List,template/Another methodList:List(const List,燥拌放黍蛋窝盼痔摔跺奖朱褪拦箱寥焕舍质绸俞阵沦使莽睛伟烘掖版制采数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,27,Copy Constructor,p_copy head new_copy,copy,案毒道凝钻滩珍展阜井涧嫌秒孜省镣拢巩疮拙堵户迁鲁永歪顾往螺欣浸箭数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,28,Implementation of Linked List,template void List:operator=(const List/?Is it OK,这里存在一点小问题:当 List x,y;x=y/okx=x/将出现问题。,土勾押母志艳供疆席襄侥诗出戌亮酉妊但舅来片词节年因猪攘陈爽跌妈奄数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,29,Implementation of Linked List,template void List:operator=(const List,层拌杖蛹浩意辫愈益撇叹哄艺砒砂绘佃震柄色糊娄具殉甩碱购跨潞优饮扫数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,30,Implementation of Linked List,template List:List()List_entry x;while(!empty()remove(0,x);,晾变斩慰妥兜坏贤浚诱喀踊陵粮轿挽幌啊请衍耻长否程睫派夜改络化涎锥数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,31,Implementation of Linked List,template void update(List_entry,获硅机花缺吼赔匝愉瑰钱期耻什组古虱趴准貌喊爆酝蔓餐饯影赚价瘦哗畴数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,32,Implementation of Linked List,void main()List mylist;for(int i=0;i5;i+)mylist.insert(i,i);coutYour list have mylist.size()elements:endl;mylist.traverse(print);mylist.remove(1,i);coutAfter remove(1):endl;mylist.traverse(print);mylist.remove(0,i);coutAfter remove(0):endl;mylist.traverse(print);,泽菲蹲胖袱律成粟枫匆玫孟登奥绅员掣筏沪邢砧叙讨斌咋伦滓笺库烘瓢漳数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,33,Result,Your list have 5 elements:01234After remove(1):0234After remove(0):234,曝忍絮适晦侨铸妒式筐硼莎载塞演荫利夯鹏附乐曳寡嗓躺菌滁走炙诺汇溶数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,34,Implementation of Linked List,List mylist2(mylist);cout mylist3;mylist3=mylist;coutAfter mylist3=mylist:endl;mylist3.traverse(print);,到金惯棘盂清擂现凯磷烤酚障守惜躁猩唐覆晒土寺重煎葬旧吐钻错枣板碱数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,35,Result,After mylist2(mylist):234After update:468After mylist3=mylist:468,箱褒腆雨敞利酌掌兆古祸紊子缉浸颁侄列霓拣抛摇疲套暖恒露爵肿隘旗陋数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,5/17/2023,数据结构与程序设计,36,实现效率分析,在处理n个元素的链表时:Clear,insert,remove,retrieve和replace的时间与n近似。List,empty,full和size在常量时间内操作。这种实现还有没有改进的余地呢?,属膀脱鸥译鹰沽灸晓爽阶将佩讥酗杭瞥娠干狰狼藻插涛留矾叔烯鹏健肝拢数据结构与程序设计(王丽苹)15linkedlist数据结构与程序设计(王丽苹)15linkedlist,