2022年数据结构经典例题 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年数据结构经典例题 .pdf》由会员分享,可在线阅读,更多相关《2022年数据结构经典例题 .pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构经典例题1.设计一个算法将L拆分成两个带头节点的单链表L1和 L2。void split(LinkList *&L,LinkList *&L1,LinkList *&L2) LinkList *p=L-next,*q,*r1; /p 指向第 1 个数据节点L1=L; /L1 利用原来 L的头节点r1=L1; /r1 始终指向 L1的尾节点L2=(LinkList *)malloc(sizeof(LinkList);/ 创建 L2 的头节点L2-next=NULL; / 置 L2的指针域为 NULL while (p!=NULL) r1-next=p; / 采用尾插法将 *p(data
2、值为 ai)插入 L1中r1=p; p=p-next; /p 移向下一个节点 (data 值为 bi) q=p-next; /由于头插法修改 p 的 next 域,故用 q 保存*p 的后继节点p-next=L2-next; / 采用头插法将 *p 插入 L2中L2-next=p; p=q; /p 重新指向 ai+1的节点 r1-next=NULL; / 尾节点 next 置空 2.查找链表中倒数第k 个位置上的节点( k 为正整数)。若查找成功,算法输出该节点的 data 域的值,并返回 1;否则,只返回 0。typedef struct LNode int data; struct LNo
3、de *link; *LinkList; int Searchk(LinkList list,int k) LinkList p,q; int count=0; p=q=list-link; while (p!=NULL) if (countlink; p=p-link; if (countdata); return(1); 3.假定采用带头节点的单链表保存单词,当两个单词有相同的后缀时,则可共享相同的后缀存储空间。设str1 和 str2 分别指向两个单词所在单链表的头节点请设计一个时间上尽可能高效的算法,找出由str1 和 str2 所指向两个链表共同后缀的起始位置。typedef str
4、uct Node char data; struct Node *next; SNODE; SNODE * Findlist(SNODE *str1,SNODE *str2) int m,n; SNODE *p,*q; m=Listlen(str1); / 求单链表 str1 的长度 m n=Listlen(str2); / 求单链表 str2 的长度 n for (p=str1;mn;m-) / 若 m 大,则 str1 后移 m-n+1 个节点p=p-next; for (q=str2;mnext; while (p-next!=NULL & p-next!=q-next) p=p-nex
5、t; /p 、q 两步后移找第一个指针值相等的节点q=q-next; return p-next; int Listlen(SNODE *head) / 求单链表的长度 int len=0; while (head-next!=NUL) len+; head=head-next; return len; 4.设计一个算法,删除一个单链表L中元素值最大的节点。void delmaxnode(LinkList *&L) LinkList *p=L-next,*pre=L,*maxp=p,*maxpre=pre; while (p!=NULL) / 用 p 扫描整个单链表 ,pre 始终指向其前驱节
6、点 if (maxp-datadata) / 若找到一个更大的节点 maxp=p; / 更改 maxp maxpre=pre; / 更改 maxpre 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - pre=p; /p 、pre 同步后移一个节点p=p-next; maxpre-next=maxp-next; / 删除*maxp 节点free(maxp); / 释放*maxp 节点 5. 有一个带头节点的单链表L(至少有一个数据
7、节点) ,设计一个算法使其元素递增有序排列。void sort(LinkList *&L) LinkList *p,*pre,*q; p=L-next-next; /p 指向 L的第 2 个数据节点L-next-next=NULL; / 构造只含一个数据节点的有序表while (p!=NULL) q=p-next; /q 保存*p 节点后继节点的指针pre=L; / 从有序表开头进行比较 ,pre 指向插入 *p 的前驱节点while (pre-next!=NULL & pre-next-datadata) pre=pre-next; / 在有序表中找插入 *p 的前驱节点 *pre p-ne
8、xt=pre-next;/将*pre 之后插入 *p pre-next=p; p=q; / 扫描原单链表余下的节点 6. 有一个带头节点的双链表L,设计一个算法将其所有元素逆置,即第1 个元素变为最后一个元素, 第 2 个元素变为倒数第2 个元素,最后一个元素变为第1 个元素。void reverse(DLinkList *&L) / 双链表节点逆置 DLinkList *p=L-next,*q; /p 指向开好节点L-next=NULL; / 构造只有头节点的双链表L while (p!=NULL) / 扫描 L的数据节点 q=p-next; / 用 q 保存其后继节点p-next=L-ne
9、xt; / 采用头插法将 *p 节点插入if (L-next!=NULL) / 修改其前驱指针L-next-prior=p; L-next=p; p-prior=L; p=q; / 让 p 重新指向其后继节点 7.编写出判断带头节点的双向循环链表L是否对称相等的算法。int Equeal(DLinkList *L) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - int same=1; DLinkList *p=L-next;
10、/p 指向第一个数据节点DLinkList *q=L-prior; /q 指向最后数据节点while (same=1) if (p-data!=q-data) same=0; else if (p=q) break; / 数据节点为奇数的情况q=q-prior; if (p=q) break; / 数据节点为偶数的情况p=p-next; return same; 8.假设有两个有序表LA和 LB表示, 设计一个算法,将它们合并成一个有序表LC 。要求不破坏原有表LA和 LB。void UnionList(SqList *LA,SqList *LB,SqList *&LC) int i=0,j=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年数据结构经典例题 2022 数据结构 经典 例题
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内