- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2016,行政区划,数据库
2016,行政区划,数据库
篇一:2010香港特别行政区数据库入门高级
1、请设计一个算法,要求该算法把二叉树的叶子结点按从左到右的顺序连成一个单链表,表头指针为head。二叉树按二叉链表方式存储,链接时用叶子结点的右指针域来存放单链表指针。分析你的算法的时、空复杂度。
2、后序遍历最后访问根结点,即在递归算法中,根是压在栈底的。采用后序非递归算法,栈中存放二叉树结点的指针,当访问到某结点时,栈中所有元素均为该结点的祖先。本题要找p和q 的最近共同祖先结点r ,不失一般性,设p在q的左边。后序遍历必然先遍历到结点p,栈中元素均为p的祖先。将栈拷入另一辅助栈中。再继续遍历到结点q时,将栈中元素从栈顶开始逐个到辅助栈中去匹配,第一个匹配(即相等)的元素就是结点p 和q的最近公共祖先。
typedef struct
{BiTree t;int tag;//tag=0 表示结点的左子女已被访问,tag=1表示结点的右子女已被访问
}stack;
stack s[],s1[];//栈,容量够大
BiTree Ancestor(BiTree ROOT,p,q,r)//求二叉树上结点p和q的最近的共同祖先结点r。 {top=0; bt=ROOT;
while(bt!=null ||top0)
{while(bt!=null amp;amp; bt!=p amp;amp; bt!=q) //结点入栈
{s[++top].t=bt; s[top].tag=0; bt=bt-lchild;} //沿左分枝向下
if(bt==p) //不失一般性,假定p在q的左侧,遇结点p时,栈中元素均为p的祖先结点 {for(i=1;ilt;=top;i++) s1[i]=s[i]; top1=top; }//将栈s的元素转入辅助栈s1 保存 if(bt==q) //找到q 结点。
for(i=top;i0;i--)//;将栈中元素的树结点到s1去匹配
{pp=s[i].t;
for (j=top1;j0;j--)
if(s1[j].t==pp) {printf(“p 和q的最近共同的祖先已找到”);return (pp);} }
while(top!=0 amp;amp; s[top].tag==1) top--;//退栈
if (top!=0){s[top].tag=1;bt=s[top].t-rchild;} //沿右分枝向下遍历
}//结束while(bt!=null ||top0)
return(null);//q、p无公共祖先
}//结束Ancestor
3、约瑟夫环问题(Josephus问题)是指编号为1、2、?,n的n(n0)个人按顺时针方向围坐成一圈,现从第s个人开始按顺时针方向报数,数到第m个人出列,然后从出列的下一个人重新开始报数,数到第m的人又出列,?,如此重复直到所有的人全部出列为止。现要求采用循环链表结构设计一个算法,模拟此过程。
#includelt;stdlib.h
typedef int datatype;
typedef struct node
{datatype data;
struct node *next;
}listnode;
typedef listnode *linklist;
void jose(linklist head,int s,int m)
{linklist k1,pre,p;
int count=1;
pre=NULL;
k1=head; /*k1为报数的起点*/
while (count!=s)/*找初始报数起点*/
{pre=k1;
k1=k1-next;
count++;
}
while(k1-next!=k1) /*当循环链表中的结点个数大于1时*/
{ p=k1; /*从k1开始报数*/
count=1;
while (count!=m)/*连续数m个结点*/
{ pre=p;
p=p-next;
count++;
}
pre-next=p-next; /*输出该结点,并删除该结点*/
printf(%4d,p-data);
free(p);
k1=pre-next; /*新的报数起点*/
}
printf(%4d,k1-data); /*输出最后一个结点*/
free(k1);
}
main()
{linklist head,p,r;
int n,s,m,i;
printf(n=);
scanf(%d,amp;n);
printf(s=);
scanf(%d,amp;s);
printf(m=,amp;m);
scanf(%d,amp;m);
您可能关注的文档
最近下载
- 超详细《石油化工建设工程施工安全技术规范》GB50484-2022.pdf
- 2024年春江苏开放大学工科数学基础050086过程性作业(四).doc VIP
- T_CACM 1169-2019 中医内科临床诊疗指南 喘证 (慢性阻塞性肺疾病并右心衰竭).docx
- 《综合韩国语》教学教案—-发音部分.pdf VIP
- 壳管式干式蒸发器设计说明书.docx VIP
- OTDR的关键因素-ViaviSolutions.PDF VIP
- 高中音乐《中国影视音乐》PPT 课件.pptx
- 物业安全隐患排查台账范例.pdf
- 癫痫病人的急救与护理ppt课件【28页】.pptx
- 企业事业单位突发环境事件应急预案评审表.pdf VIP
文档评论(0)