版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
千里之行,始于足下让知识带有温度。第第2页/共2页精品文档推荐数据结构经典例题数据结构经典例题
1.设计一个算法将L拆分成两个带头节点的单链表L1和L2。
voidsplit(LinkList*//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值为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。
typedefstructLNode
{intdata;
structLNode*link;
}*LinkList;
intSearchk(LinkListlist,intk)
{LinkListp,q;
intcount=0;
p=q=list->link;
while(p!=NULL)
{if(countlink;
p=p->link;
}
if(countdata);
return(1);
}
}
3.假定采纳带头节点的单链表保存单词,当两个单词有相同的后缀时,则可分享相同的后缀存储空间。设str1和str2分离指向两个单词所在单链表的头节点请设计一个时光上尽可能高效的算法,找出由str1和str2所指向两个链表共同后缀的起始位置。
typedefstructNode
{chardata;
structNode*next;
}SNODE;
SNODE*Findlist(SNODE*str1,SNODE*str2)
{intm,n;
SNODE*p,*q;
m=Listlen(str1);//求单链表str1的长度m
n=Listlen(str2);//求单链表str2的长度n
for(p=str1;m>n;m--)//若m大,则str1后移m-n+1个节点p=p->next;
for(q=str2;mnext;
while(p->next!=NULL//p、q两步后移找第一个指针值相等的节点q=q->next;
}
returnp->next;
}
intListlen(SNODE*head)//求单链表的长度
{intlen=0;
while(head->next!=NUL)
{len++;
head=head->next;
}
returnlen;
}
4.设计一个算法,删除一个单链表L中元素值最大的节点。
voiddelmaxnode(LinkList*
while(p!=NULL)//用p扫描囫囵单链表,pre始终指向其前驱节点
{if(maxp->datadata)//若找到一个更大的节点{maxp=p;//更改maxp
maxpre=pre;//更改maxpre
}
pre=p;//p、pre同步后移一个节点
p=p->next;
}
maxpre->next=maxp->next;//删除*maxp节点
free(maxp);//释放*maxp节点
}
5.有一个带头节点的单链表L(至少有一个数据节点),设计一个算法使其元素递增有序罗列。
voidsort(LinkList*
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//在有序表中找插入*p的前驱节点*pre
p->next=pre->next;//将*pre之后插入*p
pre->next=p;
p=q;//扫描原单链表余下的节点
}
}
6.有一个带头节点的双链表L,设计一个算法将其全部元素逆置,即第1个元素变为最后一个元素,第2个元素变为倒数第2个元素,…,最后一个元素变为第1个元素。
voidreverse(DLinkList*//p指向开好节点
L->next=NULL;//构造惟独头节点的双链表L
while(p!=NULL)//扫描L的数据节点
{q=p->next;//用q保存其后继节点
p->next=L->next;//采纳头插法将*p节点插入
if(L->next!=NULL)//修改其前驱指针
L->next->prior=p;
L->next=p;
p->prior=L;
p=q;//让p重新指向其后继节点
}
}
7.编写出推断带头节点的双向循环链表L是否对称相等的算法。
intEqueal(DLinkList*L)
{intsame=1;
DLinkList*p=L->next;//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;
}
returnsame;
}
8.假设有两个有序表LA和LB表示,设计一个算法,将它们合并成一个有序表LC。要求不破坏原有表LA和LB。
voidUnionList(SqList*LA,SqList*LB,SqList*//i、j分离为LA、LB的下标,k为LC中元素个数LC=(SqList*)malloc(sizeof(SqList));//建立有序挨次表LC
while(ilength
i++;k++;
}
else//LA->data[i]>LB->data[j]
{LC->data[k]=LB->data[j];
j++;k++;
}
}
while(ilength)//LA尚未扫描完,将其余元素插入LC中
{LC->data[k]=LA->data[i];
i++;k++;
}
while(jlength)//LB尚未扫描完,将其余元素插入LC中
{LC->data[k]=LB->data[j];
j++;k++;
}
LC->length=k;
}
9.设有4个元素a、b、c、d进栈,给出它们全部可能的出栈次序。
解:全部可能的出栈次序如下:
abcdabdcacbdacdb
adcbbacdbadcbcad
bcdabdcacbadcbda
cdbadcba
10.编写一个算法利用挨次栈推断一个字符串是否是对称串。所谓对称串是指从左向右读和从右向左读的序列相同。
boolsymmetry(ElemTypestr[])
{inti;ElemTypee;
SqStack*st;
InitStack(st);//初始化栈
for(i=0;str[i]!='\0';i++)//将串全部元素进栈
Push(st,str[i]);//元素进栈
for(i=0;str[i]!='\0';i++)
{Pop(st,e);//退栈元素e
if(str[i]!=e)//若e与当前串元素不同则不是对称串
{DestroyStack(st);//销毁栈
returnfalse;
}
}
DestroyStack(st);//销毁栈
returntrue;
}
11.编写一个算法推断输入的表达式中括号是否配对(假设只含有左、右圆括号)boolMatch(charexp[],intn)
{inti=0;chare;boolmatch=true;SqStack*st;
InitStack(st);//初始化栈
while(inext!=NULLp->next->data='z';//替换为xyz
q=(LiString*)malloc(sizeof(LiString));
q->data='y';q->next=p->next;p->next=q;
find=1;
}
elsep=p->next;
}
}
13.含n个节点的三次树的最小高度是多少?最大高度是多少?
解:设含n个节点的(为彻低三次树时高度最小)的三次树的最小高度为h,则有:
1+3+9+…+3h-2<n≤1+3+9+…+3h-1
(3h-1-1)/2<n≤(3h-1)/2
3h-1<2n+1≤3h
即:h=log3(2n+1)
最大高度为n-2。
14.假设图G采纳邻接表存储,设计一个算法,输出图G中从顶点u到v的全部容易路径。
voidPathAll(ALGraph*G,intu,intv,intpath[],intd)
//d是到当前为止已走过的路径长度,调用时初值为-1
{intw,i;ArcNode*p;
visited[u]=1;d++;//路径长度增1
path[d]=u;//将当前顶点添加到路径中
if(u==v
for(i=0;iadjlist[u].firstarc;//p指向u的第一条边
while(p!=NULL)
{w=p->adjvex;//w为u的邻接顶点
if(visited[w]==0)//若顶点未标记拜访,则递归拜访之
PathAll(G,w,v,path,d);
p=p->nextarc//找u的下一个邻接顶点}
visited[u]=0;//恢复环境
}
voidmain()
{intpath[MAXV],u=1,v=4,i,j;
MGraphg;
ALGraph*G;
g.n=5;g.e=6;
intA[MAXV][MAXV]={{0,1,0,1,0}
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 旅客服务中公共关系的有效应用在广东机场
- 临床研究项目风险评估报告
- 护理与公共卫生事件应对
- 大专护士职业规划模板
- 2026年中国太空旅游行业投资方向及市场空间预测报告(智研咨询发布)
- 医院公共卫生风险管理与控制
- 2025年灌木林碳汇计量方法探讨
- 零售业连锁店运营部副经理的职责与要求
- 乐器及音响设备采购经理的面试技巧
- 基于法律保护的智慧化电子医学影相服务平台建设研究
- 自愿放弃赡养权协议书
- 备战2026年高考数学考试易错题(新高考)专题14 排列组合与二项式定理(解析版)
- 《陆上风力发电机组钢混塔架施工与质量验收规范》
- 2025年及未来5年中国对外劳务合作市场运行态势及行业发展前景预测报告
- 2025年招标采购从业人员专业技术能力考试(招标采购合同管理中级)测试题库及答案(山西阳泉)
- 老年痴呆合并激越行为护理查房
- 2025下半年新疆生产建设兵团事业单位招聘(2398人)考试参考试题及答案解析
- 巡察底稿制作培训课件
- 停车场防汛应急预案
- 内蒙古自治区水利工程设计概(估)算编制规定(工程部分)(试行)2024
- 部编版道德与法治一年级下册第15课《戴上红领巾》精美课件
评论
0/150
提交评论