数据结构CC++循环链表.ppt

数据结构CC++循环链表.ppt

ID:53618906

大小:184.00 KB

页数:24页

时间:2020-04-22

数据结构CC++循环链表.ppt_第1页
数据结构CC++循环链表.ppt_第2页
数据结构CC++循环链表.ppt_第3页
数据结构CC++循环链表.ppt_第4页
数据结构CC++循环链表.ppt_第5页
资源描述:

《数据结构CC++循环链表.ppt》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、例3.1有一个单链表L(至少有一个结点),其头结点指针为head,编写一个函数将L逆置,即最后一个结点变成第1个结点,原来倒数第二个结点变成第二个结点……如此等等。解:本题采用的算法是,从头到尾遍历单链表L,并设置3个附加指针p、q、r,p指向当前处理的结点,q指向p的下一个结点,r指向q的下一个结点,q、r的作用是为了防止倒置指针时,下一个结点的丢失而设置的,有了这三个指针,就可以方便地实现指针的倒置。最后将第一个结点的next域置为NULL,并将头指针指向最后一个结点,这样达到了本题的要求。voidinvert(linklisthead){linklistp,q,

2、r;p=head;q=p->next;while(q!=NULL)/*没有后继时停止*/{r=q->next;q->next=p;p=q;q=r;}head->next=NULL;head=p;}typedefstructnode{datatypedata;structnode*next;}*linklist;堆栈的最简单的表示方法是采用一维数组,为形象起见,一般在图中将堆栈画成竖直的。设数组名为data,其下标的下界为0,上界为n。一般需用一个变量top记录当前栈顶的下标值,top也叫做栈指针。topADCB3642105data本例中top=4在C语言中通常用以下

3、方式定义一个顺序栈结构体:#defineN30Typedefstructstack{datatypedata[N];Inttop;}sqstack;3.2链表应用二、堆栈的运算入栈(push)入栈的主要操作是先将栈顶指针加1;然后将入栈元素放到栈顶指针所指示下值的位置上。设用指针P表示堆栈,入栈的元素值为x,则可得到入栈函数如下:#defineN30Typedefstructstack{datatypedata[N];Inttop;}sqstack;voidpush(sqstack*p,datatypex){if(p->top==N-1)printf(“栈溢出!”

4、);/*显示栈满信息*/else{(p->top)++;p->data[p->top]=x;}}#defineN30Typedefstructstack{datatypedata[N];Inttop;}sqstack;voidpop(sqstack*p){if(p->top==-1)printf(“空栈!”);/*栈为空显示相应的信息*/else{x=p->data[p->top];(p->top)--;/*栈顶位置下移*/}returnx;}2.出栈(Pop)出栈运算时,先将栈顶的元素值赋给某个变量,以备后面的运算应用;然后栈顶指针减1,将栈顶位置下移。假设已指

5、定的变量为x,则出栈的函数如下:链堆栈是栈的链接存储表示,它是只允许在表头进行插入和删除运算的单链表。它与普通的单链表没有什么不同,只是将头指针head改称为栈顶指针top。链堆栈链堆栈的入栈算法在栈顶指针是top的链堆栈中插入一个值为x的结点的算法:voidpush(linklisttop,datatypex){linklists;s=newnode;/*建立一个结点指针*/s->data=x;s->next=top;top=s;}intpop(linklisttop){intx;linklistp;if(top==NULL)cout<<“栈为空!”;else{x=

6、top->data;p=top;top=top->next;deletep;returnx;}}链堆栈的出栈算法3.3循环链表与双向链表循环链表(circularlinkedlist)是一种首尾相接的链表,将单链表表尾结点原来的空指针改为指向表头结点,就成为循环链表。循环链表并不多占存储单元,但从循环链表的任一个结点出发都可以访问到此链表的每一个结点,因为当访问到表尾结点后又能返回到头结点。一、循环链表例3.2有两个循环单链表,头指针分为head1和head2,编写函数将链表head2链接到链表head1之后,链接后的链表仍保持是循环链表的形式。解:先分别找到两个链表

7、的表尾,将head2放入链表head1的表尾,将两个链表链接起来,然后将head1放入原head2链表的表尾,构成新的循环链表。例3.2算法link(linklisthead1,head2){linklistp,q;p=head1;while(p->next!=head1)p=p->next;q=head2;while(q->next!=head2)q=q->next;p->next=head2;q->next=head1;}1.带头指针的循环链表通常在循环链表的表头结点前面再加一个空结点,也叫空表头结点。表空时空表头结点的指针指向其本身,如下面的图

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。