清华大学课件链表的用法PPT全优质PPT.ppt
- 文档编号:15038540
- 上传时间:2022-10-27
- 格式:PPT
- 页数:35
- 大小:221KB
清华大学课件链表的用法PPT全优质PPT.ppt
《清华大学课件链表的用法PPT全优质PPT.ppt》由会员分享,可在线阅读,更多相关《清华大学课件链表的用法PPT全优质PPT.ppt(35页珍藏版)》请在冰豆网上搜索。
student*next;
n动态申申请内存的方法内存的方法student*p=(student*)malloc(sizeof(student);
或或student*p=newstudent;
2022/10/2779.2.29.2.2单向链表的操作单向链表的操作n建立建立单向向链表表n声明一个声明一个链首指首指针变量量headhead,并并赋初初值NULL(NULL(包含包含00个个节点的点的链表表)n动态分配一个新分配一个新节点,将点,将该节点点链入入链尾尾n重复上一步重复上一步2022/10/278例子例子11:
建立链表,读入:
建立链表,读入nn个整数,每个整数,每个整数作为一个新结点插入到链尾个整数作为一个新结点插入到链尾#includestructnodeintdata;
node*createList(intn);
intmain()intn;
node*listHead=NULL;
coutn;
if(n0)listHead=createList(n);
return0;
2022/10/279例子例子11:
建立链表,读入nn个整数,每个整数,每个整数作为一个新结点插入到链尾个整数作为一个新结点插入到链尾node*createList(intn)node*temp,*tail=NULL,*head=NULL;
intnum;
cinnum;
head=newnode;
/为新节点动态分配内存为新节点动态分配内存if(head=NULL)coutdata=num;
head-next=NULL;
tail=head;
2022/10/2710例子例子11:
建立链表,读入nn个整数,每个整数,每个整数作为一个新结点插入到链尾个整数作为一个新结点插入到链尾for(inti=0;
inum;
temp=newnode;
/为新节点动态分配内存为新节点动态分配内存if(temp=NULL)coutdata=num;
temp-next=NULL;
tail-next=temp;
tail=temp;
returnhead;
2022/10/2711建立链表过程建立链表过程tailtailtemptempheadheadNULLNULL初始状态初始状态NULLNULLNULLNULL读入读入11后后tailtailtemptempheadhead11NULLNULL2022/10/2712建立链表过程建立链表过程读入读入22后后tailtailtemptempheadhead1122NULLNULL读入读入33后后tailtailtemptempheadhead1133NULLNULL222022/10/27139.2.29.2.2单向链表的操作单向链表的操作n遍遍历链表表n依次依次访问链表中的每个表中的每个节点的信息点的信息head-data=15;
head-next-data=15;
n一般遍一般遍历方法方法node*curNode=head;
while(curNode)curNode=curNode-next;
2022/10/2714例子例子22:
编写一个函数,输出例:
编写一个函数,输出例11链表链表中各节点的中各节点的datadata成员的值成员的值voidoutputList(node*head)coutList:
;
node*curNode=head;
while(curNode)coutdata;
if(curNode-next)cout;
curNode=curNode-next;
coutdata=n)coutFindninthelist.next;
coutCantfindninthelist.nextcptr-nextaptr-nextaptr-next;
(3)(3)把把cc的地址的地址赋给节点点aa的后的后继指指针aptr-next=cptr;
aptr-next=cptr;
2022/10/2717例子例子44:
编写一个函数,将输入的整数:
编写一个函数,将输入的整数从小到大插入链表从小到大插入链表node*insertData(intn,node*head)node*curNode=head;
/指向插入点的后指向插入点的后节点点node*preNode=NULL;
/指向插入点的前指向插入点的前节点点node*newNode=NULL;
/指向新建指向新建节点点while(curNode!
=NULL)&
(curNode-datanext;
newNode=newnode;
if(newNode=NULL)coutdata=n;
if(preNode=NULL)/插入到链表头插入到链表头newNode-next=curNode;
returnnewNode;
elsepreNode-next=newNode;
newNode-next=curNode;
2022/10/27199.2.29.2.2单向链表的操作单向链表的操作n从从链表中表中删除一个除一个节点点cc
(1)
(1)在在链表表中中查找找要要删除除的的节点点cc,用用指指针cptrcptr指向指向节点点c;
c;
(2)
(2)如如果果cc有有前前驱节点点(设为d,d,用用指指针dptrdptr指指向向d)d),则将将dd的的后后继指指针指指向向cc的的后后继节点点:
dptr-next=cptr-nextdptr-next=cptr-next(3)(3)释放放cc占用的空占用的空间2022/10/2720例子例子55:
编写一个函数,删除链表中包:
编写一个函数,删除链表中包含指定整数的节点含指定整数的节点node*deleteData(intn,node*head)node*curNode=head;
/指向当前指向当前节点点node*preNode=NULL;
/指向当前指向当前节点的前点的前驱节点点while(curNode&
curNode-data!
=n)preNode=curNode;
/当前当前节节点点变为变为前前驱节驱节点点curNode=curNode-next;
if(curNode=NULL)coutCantfindninthelistnext;
elsepreNode-next=curNode-next;
deletecurNode;
/返回返回链首指首指针2022/10/27219.39.3双向链表双向链表n单向向链表:
有利于从表:
有利于从链首向首向链尾遍尾遍历n有些有些时候双向遍候双向遍历是需要的是需要的双向双向链表表2022/10/27229.3.19.3.1双向链表的定义双向链表的定义n定定义双向双向链表的表的节点:
点:
/指向后指向后续节点点node*pre;
/指向前面的指向前面的节点点;
2022/10/27239.3.19.3.1双向链表的定义双向链表的定义n双向双向链表的例子:
表的例子:
n双向双向链表一般也由表一般也由头指指针唯一确定唯一确定n双向双向链表首尾相接可以构成双向循表首尾相接可以构成双向循环链表表headhead2828NULLNULL5252229696NULLNULL2022/10/27249.3.29.3.2双向链表的操作双向链表的操作n建立双向建立双向链表表n新新节点点链入入链尾尾n原原链尾尾节点的后点的后继指指针指向新指向新节点点n新新节点的前点的前驱指指针指向原指向原链尾尾节点点n新新链尾尾节点的后点的后继指指针置置为空指空指针n将新将新节点点链入入链头n原原链头节点的前点的前驱指指针指向新指向新节点点n新新节点的后点的后继指指针指向原指向原链头节点点n新新链头节点的前点的前驱指指针置置为空指空指针2022/10/2725例子例子66:
编写一个函数,按数据输入的:
编写一个函数,按数据输入的顺序建立双向链表顺序建立双向链表node*createBidirList(intn)node*temp,*tail=NULL,*head=NULL;
head-pre=NULL;
2022/10/2726例子例子66:
编写一个函数,按数据输入的顺序建立双向链表顺序建立双向链表for(inti=0;
temp-pre=tail;
2022/10/27279.3.29.3.2双向链表的操作双向链表的操作n双向双向链表的遍表的遍历n有有链首首节点,点,则可以沿着后可以沿着后继指指针从从头至尾遍至尾遍历n有有链尾尾节点,点,则可以沿着前可以沿着前驱指指针从从尾向尾向头遍遍历2022/10/2728例子例子77:
编写一个函数,输出双向链表:
编写一个函数,输出双向链表中各节点的中各节点的datadata成员的值成员的值voidoutputBidirList(node*head)coutpre)cout-;
coutdata;
coutdatanext;
/为新新节点点动态分配内存分配内存if(newNode=NULL)/内存分配不成功内存分配不成功coutdata=n;
if(preNode=NULL)/链头newNode-next=curNode;
newNode-pre=NULL;
if(curNode!
=NULL)curNode-pre=newNode;
if(curNode=NULL)/链尾尾newNode-pre=preNode;
preNode-next=newNode;
newNode-next=NULL;
2022/10/2732例子例子88:
编写函数,将整数:
编写函数,将整数nn插入到一插入到一个已排序的双向链表中个已排序的双向链表中(从小到大从小到大)else/链中中preNode-next=newNode;
newNode-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 清华大学 课件 用法 PPT