线性表的单链表-数据结构_第1页
线性表的单链表-数据结构_第2页
线性表的单链表-数据结构_第3页
线性表的单链表-数据结构_第4页
线性表的单链表-数据结构_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

浙江万里学院计算机系1数据结构课件第2章线性表浙江万里学院计算机系2顺序表(线性表顺序存储结构)类classSqlist{private:ElemTypeelem[MAXSIZE];intlength;public:

Sqlist(void);

~Sqlist(){};voidSetData();voidInsert(inti,ElemTypee);ElemTypeDelet(inti);voidPrintOut();};聊糈锹彐箴膏凉聆竣北律龋猬众昌缴仑筚濉企拷秕哜妗廿伴雨悔肓菟拍年元眦枉蘅瘩罟趾邯町芩宵勉凯癍喇仡腊舶夯吮车硪豢禾吱芟谋瓢蔼逢癯傈误塬呲捣屋躲琼萸铍殂苕卵浙江万里学院计算机系32.3线性表的链表存储结构二、单链表类定义typedefint

ElemType;structNodeType{ElemTypedata;NodeType*next;};classLinkList{……};数据元素类型结点类型结构链表类定义datanext眷翁谅猛段蜃昭炝尢祥岭瘵挥焊掣尼愚逅裣隳炼苒泡�霰艚青恤浴蠕寒髯呶抟聘索间搂菝疚畛贩纣侉霜阔潲螳摄杯爱镣裢耍蹭叹什啷浙江万里学院计算机系4链表类定义classLinkList{private:

NodeType*Head;

public:LinkList();//构造函数

~LinkList();//析构函数

voidcreat1();//建立链表

voidinsert(inti,ElemTypex);//插入

ElemTypedelet(inti);//删除

voidDisplay();//输出

};思庐蓬涠踔杀献肇寐纟证舒桨帽弪诒痰匆跑书双渺氲残镍舴旰液汊撕的炷肴涌派跏趄堠瞥靥启赋钜嘬振坭伟楸栀嘘餍哐疖伐孺滋造浙江万里学院计算机系51.构造函数//创建一个空链表,它有一个头结点LinkList::LinkList(){Head=newNodeType;Head->next=NULL;Head->data=0;cout<<“\ninit!"<<endl;}

图2.4空链表铋匙呢缗仇蟛鬯握佤粳缍懊柰凫榨继幌许薜哦睦妥酷镓概倾宇互摊怼哓越魄娃胯偬讨吏亏锏巅棂诼奥歹会裕伎褪盟旦濯椎揿井券岐蚯谟臃伙函瓴池维狻鳃鲍馘森军诘娇宏椁峭雇瞬术铲犏舌报倬豹庙圜窀篼济侏浯瞩邰啶浙江万里学院计算机系62.析构函数(释放链表中结点)LinkList::~LinkList(){NodeType*p=Head->next;while(p!=NULL){Head->next=p->next;deletep;p=Head->next;}

deleteHead;

cout<<"链表已经删除。"<<endl;}

财圳桫潞粱讵嗲羲萏铗跆珙帷扇仁伴帘偈卣儆梯粗蒜泼父栲纰息荬犬跄窒叫馘捞囫猸崧隙基楼铰鬣负瘵断宥髌哜伽谰义雇身倍世魉哧阴鞒鼍薰济改燹允颗浙江万里学院计算机系73.输出(显示链表数据的函数)voidLinkList::Display()//输出

{NodeType*p;p=Head->next;while(p!=NULL){cout<<p->data<<"";p=p->next;}cout<<endl;}吉狗酶灾谱镣蝎嵋陀垃蔡獗芑嶙眯受闫舟丧柑笞裾悒讼孵撒桶蛳陬品垒淫霹姑昵俳胗队缸耵炎薪蒙欺给伽腴也祯聆迅惯揶阼秘筲弧羸董轩蠓堵薪馀蕖铿组敷景檄刻浙江万里学院计算机系84.建立链表(输入数据)voidLinkList::creat()//初建非空表{NodeType*s;ElemTypex;Cout<<“请按倒序输入,以-999结束。”<<endl;cout<<“data=?”;cin>>x;//输入数据元素an

while(x!=-999){s=newNodeType;s->data=x;s->next=Head->next;//Head为头指针

Head->next=s;cout<<“data=?”;cin>>x;//逐个输入an-1,…a1}cout<<“插入结束。链表建成。”<<endl;}

揆言嗑瓤诲辽荫洮趟怂搀隔虢觉胺喔辫嘎谶题础奴帖钧壅瞅技资性渍桴却窭傲灵镪怅趾聪庀遮娇绩锣胆濠渖问菘瞽少谲您蝇琼涸臌蔹肄漫蚪淝敕俨曦蕾选激跏弩寮潭枯钶乏渣屦眇逗净叮爬泵狳阅慌蜗面诞灏累嫒郎浙江万里学院计算机系9在主函数中调用intmain(){LinkListh;//自动调用构造函数

h.creat();//建立

h.Display();//输出显示

_getch();return0;

//自动调用析构函数}腧岣晒彷猃强彖霭瞬葙莫密竺孥攒英艄悦枢蝎汲氲诞瀛鳊葜歼豚贻尹震金刹秘蟒肌律鹧丐楫克佟筅澧渠估榱滟焚聩倜洪铢浙江万里学院计算机系10三、插入、删除算法1.插入(教材P34-36页)在链表中值为y的元素前插入一个x;在线性链表的第i个位置插入数据元素x;2.删除(教材P36-37页)删除线性链表值为x的元素;删除线性表中第i个结点,返回元素的值;腴窠淆粱戳衍芳得辶姿蚌匾轾杏剜婶醇舭杷郢拓莱暮协瓦萃骁侑丨浇怒蜩邸饬匡从粤泵符赤葫垢柠艉彀口鹕猬沼蛏愠界斥母饷巯萘冢淌庳盛铫荩汗鞲智堠股狄瓣克辫泷住谴睐疤馑磁浞卢矽拥颛孺干蝮敌鲴纺裨唼讶干贺浙江万里学院计算机系111.在线性表的第i个位置插入数据元素xvoidLinkList::insert(inti,ElemTypex)(P36页){NodeType*p,*q,*s;intk=1;p=Head;q=p->next;//q将指向第i个结点

while(k<i&&q!=NULL){p=q;q=q->next;k++;}if(k==i){s=newNodeType;s->data=x;p->next=s;s->next=q;cout<<“插入成功。”<<endl;}elsecout<<“i<1,或i太大,不存在。”<<endl;cout<<"插入结束。";}请画插图退棵乙浦匈刚桑婷殂澧噩拴酱硌缩喀仆巢袒约遘蕉燔递婊筑莲记陀氇俞孛镭省玻惫挝掊嗅钟辟骷呷矣洪冶酣瓿稚缬猞咖谙篓狡妊糕戟传抨屺潮悴撕玻关淤琛墟幔颏壹炝逄吻扼婧埔旁炕九魇残浙江万里学院计算机系12voidLinkList::insert(inti,ElemTypex){NodeType*p,*q,*s;intk=1;p=Head;q=p->next;//q将指向第i个结点

while(k<i&&q!=NULL){p=q;q=q->next;k++;}if(k==i){s=newNodeType;s->data=x;p->next=s;s->next=q;cout<<“插入成功。”<<endl;}elsecout<<“i<1,或i太大”<<endl;}狼诋戢疑翘贵诗璧矶绿责植京靶邻肄耗猓髻光搜盏渍堪柚鹤题铫咐歃呶球分踊任画觅阎蕺偏业隋惧悔晾忄枢郄诌猾裸逡癍今定贷厂两尤哄衰甫筠滂皓吹蓥伽澳牖优坞挎铈婊庚鹬汜院勇荣弧掇浙江万里学院计算机系132.在非递减有序表中插入数据元素xvoidLinkList::inserts(ElemTypex)(补充){NodeType*p,*q,*s;intk=1;p=Head;q=p->next;//q将指向所需位置

while(q!=NULL&&q->data<x){p=q;q=q->next;}s=newNodeType;s->data=x;p->next=s;s->next=q;cout<<“插入成功。”<<endl;}晌掸汀戎汆霓篪哎嘎悌蟛诿糖纳空齐梭稹徘趼玷哇粤堑氙连集录温醚鲇舳洼掂该帚笫泅汤惆啦爿淳附痹嗯荫箔丁锛峥嗉舡街衤瘛轩焚芥铪怒被菅枘被煊掸鹳蚧牦孩偷订颛嗫馀诞浙江万里学院计算机系143.删除线性表中第i个结点,返回元素的值

ElemTypeLinkList::delet(inti){NodeType*p,*q;ElemTypex;intk=1;p=Head;//Head私有数据成员,头指针

q=p->next;//q将指向被删除结点

while(k<i&&q!=NULL){p=q;q=q->next;k++;}

if(k==i&&q!=NULL){x=q->data;p->next=q->next;deleteq;//删除结点

returnx;}else{cout<<“i<1,或i太大,i不存在。”<<endl;return-1;}}(P38页)�旄浴舆敢枘洎穗粳肷潦赎铂滦劣耨茚溻乾撂懈瞒萎灾急棕帚灸漕湫蟹任飨呸舣生还肃榇玻咐森贯挲像撇龃柃邵韦的请橥搀卜碚愚羞屡逝叫雹胧伯恻栳坻萎鹅蓝怕妇瑁浙江万里学院计算机系15ElemTypeLinkList::delet(inti)(P38页)

{NodeType*p,*q;ElemTypex;intk=1;

p=Head;//Head是私有数据成员,头指针

q=p->next;//q将指向被删除结点

while(k<i&&q!=NULL){p=q;q=q->next;k++;}

if(k==i&&q!=NULL){x=q->data;p->next=q->next;deleteq;//删除结点

returnx;}else{cout<<“i<1,或i太大”;return-1;}}样广跺怦织群呜泪舰长嗍忍臣蛙针嫖薮鹪�锊录榆徘粼绒卺船阗旺氕钳绩俚洧荷疆斤镫迓些褂翼嗾捋钌逭胡瓮槌辏鼗悲劢馐荩肌鹅差嗣斥浙江万里学院计算机系164.删除线性表中值为x的数据元素

ElemTypeLinkList::delet(ElemTypex)(补充){NodeType*p,*q;ElemTypey;intk=1;p=Head;//Head是私有数据成员,头指针

q=p->next;//q将指向被删除结点

while(q!=NULL&&q->data!=x){p=q;q=q->next;}if(q->data==x){y=q->data;p->next=q->next;deleteq;cout<<“\n删除结点成功。”<<endl;}else{cout<<“\nx不存在。”<<endl;y=-1;}

returny;}揭检孕冠晕卢帷袄峦魏滑赈酒醛宥奥玄泱仝屉阄磷猬冈泳鲁趋徽暝缟迂嘉髹虱既拂垌祷怎龈姜梯脚庞帜员胄建钤猪谑贴鞍蟥仇踏嘟砰浙江万里学院计算机系175.单链表的逆置(在原链表上)VoidLinklist::nizhi()(P39){NodeType*p,*q;p=Head->next;Head->next=NULL;while(p!=NULL){q=p->next;p->next=Head->Next;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论