2019青海省C高级

发布 2021-05-04 12:05:28 阅读 6008

1、编程实现单链表的就地逆置。

23.在数组 a[1..n]中有n个数据,试建立一个带有头结点的循环链表,头指针为h,要求链中数据从小到大排列,重复的数据在链中只保存一个。

2、对二叉树的某层上的结点进行运算,采用队列结构按层次遍历最适宜。

int leafklevel(bitree bt, int k) /求二叉树bt 的第k(k>1) 层上叶子结点个数。

if(bt==null ||k<1) return(0);

bitree p=bt,qq是队列,元素是二叉树结点指针,容量足够大。

int front=0,rear=1,leaf=0; /front 和rear是队头和队尾指针, leaf是叶子结点数。

int last=1,level=1; q[1]=p; /last是二叉树同层最右结点的指针,level 是二叉树的层数。

while(front<=rear)

p=q[++front];

if(level==k &&p->lchild &&p->rchild) leaf++;叶子结点。

if(p->lchild) q[++rear]=p->lchild左子女入队。

if(p->rchild) q[++rear]=p->rchild右子女入队。

if(front==last) last移到指向下层最右一元素。

if(level>k) return (leaf层数大于k 后退出运行。

}//while }/结束leafklevel

3、数组a和b的元素分别有序,欲将两数组合并到c数组,使c仍有序,应将a和b拷贝到c,只要注意a和b数组指针的使用,以及正确处理一数组读完数据后将另一数组余下元素复制到c中即可。

void union(int a,b,c,m,n)

/整型数组a和b各有m和n个元素,前者递增有序,后者递减有序,本算法将a和b归并为递增有序的数组c。

i=0; j=n-1; k=0;//i,j,k分别是数组a,b和c的下标,因用c描述,下标从0开始。

while(i=0)

if(a[i]while(iwhile(j>=0) c[k++]b[j--]

算法结束。4、要求二叉树按二叉链表形式存储。15分。

1)写一个建立二叉树的算法。(2)写一个判别给定的二叉树是否是完全二叉树的算法。

bitree creat建立二叉树的二叉链表形式的存储结构。

elemtype x;bitree bt;

scanf(“%d”,&x); 本题假定结点数据域为整型。

if(x==0) bt=null;

else if(x>0)

else error(“输入错误”);

return(bt);

//结束 bitree

int judgecomplete(bitree bt) /判断二叉树是否是完全二叉树,如是,返回1,否则,返回0

int tag=0; bitree p=bt, q;q是队列,元素是二叉树结点指针,容量足够大。

if(p==null) return (1);

queueinit(q); queuein(q,p); 初始化队列,根结点指针入队。

while (!queueempty(q))

p=queueout(q出队。

if (p->lchild &&tag) queuein(q,p->lchild); 左子女入队。

else /judgecomplete

4、根据二叉排序树中序遍历所得结点值为增序的性质,在遍历中将当前遍历结点与其前驱结点值比较,即可得出结论,为此设全局指针变量pre(初值为null)和全局变量flag,初值为true。若非二叉排序树,则置flag为false。

#define true 1

#define false 0

typedef struct node

*btree;

void judgebst(btree t,int flag)

/ 判断二叉树是否是二叉排序树,本算法结束后,在调用程序中由flag得出结论。

if(t!=null &&flag)

//不是完全二叉树

judgebst (t->rlink,flag);/中序遍历右子树。

//judgebst算法结束。

5、 连通图的生成树包括图中的全部n个顶点和足以使图连通的n-1条边,最小生成树是边上权值之和最小的生成树。故可按权值从大到小对边进行排序,然后从大到小将边删除。每删除一条当前权值最大的边后,就去测试图是否仍连通,若不再连通,则将该边恢复。

若仍连通,继续向下删;直到剩n-1条边为止。

void spntree (adjlist g)

//用“破圈法”求解带权连通无向图的一棵最小代价生成树。

typedef struct node; /设顶点信息就是顶点编号,权是整型数。

node edge;

scanf( "d%d",&e,&n) ;输入边数和顶点数。

for (i=1;i<=e;i输入e条边:顶点,权值。

scanf("%d%d%d" ,edge[i].i ,&edge[i].j ,&edge[i].w);

for (i=2;i<=e;i++)按边上的权值大小,对边进行逆序排序。

//fork=1; eg=e;

while (eg>=n破圈,直到边数e=n-1.

if (connect(k)) 删除第k条边若仍连通。

edge[k].w=0; eg--;测试下一条边edge[k],权值置0表示该边被删除。

k++;下条边。

while

//算法结束。

connect()是测试图是否连通的函数,可用图的遍历实现,6、假设k1,…,kn是n个关键词,试解答:

试用二叉查找树的插入算法建立一棵二叉查找树,即当关键词的插入次序为k1,k2,…,kn时,用算法建立一棵以llink / rlink 链接表示的二叉查找树。

7、证明由二叉树的中序序列和后序序列,也可以唯一确定一棵二叉树。

29. ①试找出满足下列条件的二叉树。

1)先序序列与后序序列相同 2)中序序列与后序序列相同。

3)先序序列与中序序列相同 4)中序序列与层次遍历序列相同

8、因为后序遍历栈中保留当前结点的祖先的信息,用一变量保存栈的最高栈顶指针,每当退栈时,栈顶指针高于保存最高栈顶指针的值时,则将该栈倒入辅助栈中,辅助栈始终保存最长路径长度上的结点,直至后序遍历完毕,则辅助栈中内容即为所求。

void longestpath(bitree bt)//求二叉树中的第一条最长路径长度。

bitree p=bt,l,s;l, s是栈,元素是二叉树结点指针,l中保留当前最长路径中的结点。

int i,top=0,tag,longest=0;

while(p ||top>0)

//沿左分枝向下。

if(tag[top]==1) /当前结点的右分枝已遍历。

/保留当前最长路径到l栈,记住最高栈顶指针,退栈。

else if(top>0) 沿右子分枝向下。

青海省高级抹灰工试题

一 单项选择题 共 25 题,每题 2 分,每题的备选项中,只有 1 个事最符合题意 1 礓礤坡道小斜面抹上后,视干湿度如何,可以在小斜面上洒上 水泥砂子干粉吸一下水,而后用木抹子搓平,用钢抹子压光。a 1 0.5 b 1 1c 1 1.5 d 1 2 2 聚醋酸乙烯乳液为白色水溶液胶体。乳液有效期...

青海省高级钳工考试试卷

本卷共分为1大题50小题,作答时间为180分钟,总分100分,60分及格。一 单项选择题 共25题,每题2分,每题的备选项中,只有1个事最符合题意 1 当磨损限度相同时,刀具寿命越长,表示刀具磨损发生 a 越快b 越慢c 不变d 很快。2 不适宜扩孔和铰孔的钻床是 a 台钻b 立钻c 摇臂钻。d z...

青海省高级机修钳工理论试题

本卷共分为1大题50小题,作答时间为180分钟,总分100分,60分及格。一 单项选择题 共25题,每题2分,每题的备选项中,只有 1 个事最符合题意 1 下列钢材中,钢的硬度最高。a t10b 20c 45d 65mn 2 最大极限尺寸 基本尺寸。a 大于b 小于c 等于d 大于 小于或等于。3 ...