数据结构单链表PPT文件格式下载.ppt
《数据结构单链表PPT文件格式下载.ppt》由会员分享,可在线阅读,更多相关《数据结构单链表PPT文件格式下载.ppt(35页珍藏版)》请在冰豆网上搜索。
![数据结构单链表PPT文件格式下载.ppt](https://file1.bdocx.com/fileroot1/2022-10/4/44bb34a4-572f-4634-a322-34de7cc6dd6e/44bb34a4-572f-4634-a322-34de7cc6dd6e1.gif)
L)exit(overflow);
L-next=NULL;
returnOK;
L头结点头结点L211830754256pppj123单链表基本操作2、取单链表中指定位序的数据元素演示例子:
取单链表中第3个元素值取元素的基本操作单链表是一种“单链表是一种“顺序访问顺序访问”的结构,为找第”的结构,为找第ii个数个数据元素,必须先找到第据元素,必须先找到第(i-1i-1)个数据元素。
个数据元素。
单链表是一种“单链表是一种“顺序访问顺序访问”的结构,为找第”的结构,为找第ii个数个数据元素,必须先找到第据元素,必须先找到第(i-1i-1)个数据元素。
1.1.指针指针pp始终指向单链表中第始终指向单链表中第jj个结点;
个结点;
2.2.移动指针,比较移动指针,比较jj和和ii,相等则找到。
,相等则找到。
StatusGetElem_L(LinkListL,inti,ElemType&
e)/L是带头结点的链表的头指针,以e返回第i个元素/GetElem_L算法算法时间复杂度时间复杂度为为:
O(ListLength(L)p=L-next;
j=1;
/p指向第一个结点,j为计数器while(p&
jnext;
j+;
/顺指针向后查找,直到p指向第i个元素/或p为空if(p&
j=i)e=p-data;
/取得第i个元素else/第i个元素不存在returnERROR;
与顺序表相比,链表不适与顺序表相比,链表不适合于查找第合于查找第ii个元素的操个元素的操作。
作。
单链表基本操作3、插入(在第i个元素前插入e)表中单链:
ai-1有序对有序对改变为改变为和和eaiai-1在单链表中在单链表中插入结点插入结点只需要只需要修改指针修改指针。
若要在第。
若要在第ii个结点之前个结点之前插入元素,修改的是第插入元素,修改的是第(i-1)(i-1)个结点的指针。
个结点的指针。
StatusListInsert_L(LinkList&
L,inti,ElemTypee)/L为带头结点的单链表的头指针,本算法/在链表中第i个结点之前插入新的元素e/LinstInsert_L算法的算法的时间复杂度时间复杂度为:
O(ListLength(L)elsereturnERROR;
p=L;
j=0;
while(p&
jnext;
+j;
/寻找第寻找第(i-1)个结点个结点if(p&
j=i-1)s=(LinkList)malloc(sizeof(LNode);
/生成新结点s-data=e;
s-next=p-next;
p-next=s;
/插入returnOK;
eai-1aiai-1sp有序对和改变为ai-1aiai+1ai-1单链表基本操作4、删除(第i个元素)在单链表中在单链表中删除第删除第ii个结点个结点时,要找到单链表中第时,要找到单链表中第(i-1i-1)个结个结点,修改其指向后继的指针。
点,修改其指向后继的指针。
ai-1aiai+1ai-1q=p-next;
p-next=q-next;
e=q-data;
free(q);
pqStatusListDelete_L(LinkList&
L,inti,ElemType&
e)/删除以L为头指针(带头结点)的单链表中第i个结点/ListDelete_L算法的算法的时间复杂度时间复杂度为:
O(ListLength(L)p=L;
while(p-next&
/寻找第i-1个结点,并令p指向它。
if(p-next&
j=i-1)q=p-next;
/删除并释放结点e=q-data;
elsereturnERROR;
/删除位置不合理对比单链表和顺序表的基本操作插入和删除的简单性是链表存在的理由插入和删除的简单性是链表存在的理由只修改相关结点的指向保持链表特性单链表的访问方式是顺序访问单链表的访问方式是顺序访问查找第i个数据项的代价,沿着链表,一个一个结点地访问,直到找的这个数据项算法时间复杂度:
O(ListLength(L)单链表基本操作5、清空while(L-next)p=L-next;
L-next=p-next;
free(p);
算法时间复杂度:
O(ListLength(L)单链表基本操作6、销毁while(L)p=L-next;
free(L);
L=p;
单链表基本操作7、判空if(L-next=NULL)returnTRUE;
elsereturnFALSE;
8、求表长intListLength(LinkListL)p=L-next;
i=0;
while(p)i+;
p=p-next;
returni;
单链表基本操作9、搜索(查找元素)p=L-next;
i=1;
p-data!
=e)p=p-next;
i+;
if(p)returni;
elsereturn0;
从第一个结第一个结点点开始搜索搜索成功,返回搜索成功,返回位序位序;
否则,返回否则,返回00搜索成功,返回搜索成功,返回位序位序;
否则,返回否则,返回00单链表的应用1.建立单链表链表是一个动态结构,它不需要预分配空间,因此链表是一个动态结构,它不需要预分配空间,因此生成链表的过程是生成链表的过程是一个结点“逐个插入”一个结点“逐个插入”的过程。
的过程。
逆序建立单链表逆序建立单链表逆序建立单链表逆序建立单链表顺序建立单链表顺序建立单链表顺序建立单链表顺序建立单链表新结点新结点插入在头插入在头结点结点的后面,作为重排链的后面,作为重排链表后的表后的第一个结点第一个结点新结点新结点插入在尾插入在尾结点结点的后面,作为重排链的后面,作为重排链表后的表后的最后一个结点最后一个结点逆序建立单链表操作步骤操作步骤建立一个带头结点的空单链表建立一个带头结点的空单链表;
输入数据元素输入数据元素ai,建立新结点,建立新结点p,并把,并把p插入在头结点之后成为第一个结点。
插入在头结点之后成为第一个结点。
重复执行重复执行步,直到完成单链表的建立。
步,直到完成单链表的建立。
a1a1a2voidCreateList_N(LinkList&
L,intn)/逆序入输n据元素,建立点的个数带头结单链表/CreateList_L算法的算法的时间复杂度时间复杂度为:
O(Listlength(L)L=(LinkList)malloc(sizeof(LNode);
/先建立一点的表个带头结单链for(i=1;
idata);
/入元素输值p-next=L-next;
L-next=p;
/入插顺序建立单链表操作步骤操作步骤建立一个带头结点的空单链表建立一个带头结点的空单链表;
输入数据元素输入数据元素ai,建立新结点,并把其插,建立新结点,并把其插入在尾结点入在尾结点p之后成为最后一个结点。
之后成为最后一个结点。
a1pa1ppa2pa3pppan顺序建立单链表:
即新元素插入表尾L=(LinkList)malloc(sizeof(LNode);
/先建立一点的表个带头结单链时间复杂度为O(n)p=L;
for(i=1;
idata);
q-next=p-next;
p-next=q;
p=q;
单链表的应用2.归并有序链表归并有序单链表归并有序单链表LaLa和有序单链表和有序单链表LbLb得到有序单链得到有序单链表表LcLc。
链表结点之间的关系是通过指针指向建立起来的链表结点之间的关系是通过指针指向建立起来的,所以用链表进行合并不需要另外开辟存储空间,所以用链表进行合并不需要另外开辟存储空间,可以直接利用原来两个表的存储空间,合并过,可以直接利用原来两个表的存储空间,合并过程中只需要把程中只需要把La和和Lb两个链表中的结点重新进两个链表中的结点重新进行链接即可。
行链接即可。
单链表的应用归并思想:
需要设立需要设立3个指针个指针pa、pb、pc,其中,其中pa和和pb分别指向分别指向La和和Lb中当前待比较插入的结点,而中当前待比较插入的结点,而pc指向指向Lc中当前最后一个结点(中当前最后一个结点(Lc的表头结点设的表头结点设为为La的表头结点)。
指针的初值为:
的表头结点)。
pa和和pb分分别指向别指向La和和Lb表中的第一个结点,表中的第一个结点,pc指向空表指向空表Lc中的头结点。
通过比较指针中的头结点。
通过比较指针pa和和pb所指向的所指向的元素的值,依次从元素的值,依次从La或或Lb中“摘取”元素值较小中“摘取”元素值较小的结点插入到的结点插入到Lc的最后,当其中一个表变空时,的最后,当其中一个表变空时,只要将另一个表的剩余段链接在只要将另一个表的剩余段链接在pc所指结点之后所指结点之后即可。
即可。
归并有序单链表voidMergeList_L(LinkList&
La,LinkList&
Lb,LinkList&
Lc)pa=La-next;
pb=Lb-next;
/pa和pb初值指向第一个结点Lc=La;
/用La的头作为Lc的头结点pc=Lc;
/pc初值指向Lc的头结点while(pa&
pb)/La和Lb均未到达表尾,依次“摘取”两表中值较小的结点插入到Lc的最后if(pa-datadata)pc-next=pa;
pc=pa;
pa=pa-next;
elsepc-next=pb;
pc=pb;
pb=pb-next;
pc-next=pa?
pa:
pb;
free(Lb);
O(m+n)算法空间复杂度:
O
(1)单链表的应用3.稀疏多项式的运算稀疏多项式可以抽象成一个线性表。
稀疏多项式的稀疏多项式可以抽象成一个线性表。
稀疏多项式的相加过程和归并两个有序表的过程极其类似。
不同