1、编写一个过程,对一个n×n矩阵,通过行变换,使其每行元素的平均值按递增顺序排列。
2、已知有向图g=(v,e),其中v=,e=
写出g的拓扑排序的结果。
g拓扑排序的结果是:v1、v2、v4、v3、v5、v6、v7
3、根据二叉排序树中序遍历所得结点值为增序的性质,在遍历中将当前遍历结点与其前驱结点值比较,即可得出结论,为此设全局指针变量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算法结束。
4、数组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
5、二部图(bipartite graph) g=(v,e)是一个能将其结点集v分为两不相交子集v 1和v2=v-v1的无向图,使得:v1中的任何两个结点在图g中均不相邻,v2中的任何结点在图g中也均不相邻。
1).请各举一个结点个数为5的二部图和非二部图的例子。
2).请用c或pascal编写一个函数bipartite判断一个连通无向图g是否是二部图,并分析程序的时间复杂度。设g用二维数组a来表示,大小为n*n(n为结点个数)。请在程序中加必要的注释。
若有必要可直接利用堆栈或队列操作。【
6、由二叉树的前序遍历和中序遍历序列能确定唯一的一棵二叉树,下面程序的作用是实现由已知某二叉树的前序遍历和中序遍历序列,生成一棵用二叉链表表示的二叉树并打印出后序遍历序列,请写出程序所缺的语句。
#define max 100
typedef struct node
char info; struct node *llink, *rlink; }tnode;
char pred[max],inod[max];
main(int argc,int **ar**)
tnode *root;
if(argc<3) exit 0;
strcpy(pred,ar**[1]);strcpy(inod,ar**[2]);
root=restore(pred,inod,strlen(pred));
postorder(root);
tnode *restore(char *ppos,char *ipos,int n)
tnode *ptr; char *rpos; int k;
if(n<=0) return null;
ptr->info=(1)__
for((2rposk=(3)__
ptr->llink=restore(ppos+1, (4)__k );
ptr->rlink=restore ((5)__k,rpos+1,n-1-k);
return ptr;
postorder(tnode*ptr)
if(ptr=null) return;
postorder(ptr->llink); postorder(ptr->rlink); printf(“%c”,ptr->info);
7、后序遍历最后访问根结点,即在递归算法中,根是压在栈底的。采用后序非递归算法,栈中存放二叉树结点的指针,当访问到某结点时,栈中所有元素均为该结点的祖先。本题要找p和q 的最近共同祖先结点r ,不失一般性,设p在q的左边。
后序遍历必然先遍历到结点p,栈中元素均为p的祖先。将栈拷入另一辅助栈中。再继续遍历到结点q时,将栈中元素从栈顶开始逐个到辅助栈中去匹配,第一个匹配(即相等)的元素就是结点p 和q的最近公共祖先。
typedef struct
//沿左分枝向下。
if(bt==p) /不失一般性,假定p在q的左侧,遇结点p时,栈中元素均为p的祖先结点。
for(i=1;i<=top;i++)s1[i]=s[i]; top1=top; }将栈s的元素转入辅助栈s1 保存。
if(bt==q) /找到q 结点。
for(i=top;i>0;i--)将栈中元素的树结点到s1去匹配。
pp=s[i].t;
for (j=top1;j>0;j--)
if(s1[j].t==pp)
while(top!=0 &&s[top].tag==1) top退栈。
if (top!=0){s[top].tag=1;bt=s[top].t->rchild;} 沿右分枝向下遍历。
//结束while(bt!=null ||top>0)
return(null);/p无公共祖先。
//结束ancestor
8、设t是一棵满二叉树,编写一个将t的先序遍历序列转换为后序遍历序列的递归算法。
9、设从键盘输入一整数的序列:a1, a2, a3,…,an,试编写算法实现:用栈结构存储输入的整数,当ai≠-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈。
算法应对异常情况(入栈满等)给出相应的信息。
2024年安徽省基础数据高级
1 设指针变量p指向双向链表中结点a,指针变量q指向被插入结点b,要求给出在结点a的后面插入结点b的操作序列 设双向链表中结点的两个指针域分别为llink和rlink 2 题目中要求矩阵两行元素的平均值按递增顺序排序,由于每行元素个数相等,按平均值排列与按每行元素之和排列是一个意思。所以应先求出各行...
2024年江西省数据分析纲要
1 给出折半查找的递归算法,并给出算法时间复杂度性分析。2 已知有向图g v,e 其中v e 写出g的拓扑排序的结果。g拓扑排序的结果是 v1 v2 v4 v3 v5 v6 v7 3 设指针变量p指向双向链表中结点a,指针变量q指向被插入结点b,要求给出在结点a的后面插入结点b的操作序列 设双向链表...
数据分析管理程序 2019
修改记录。修改内容修改理由批准人生效日期。数据分析管理程序版本 修改号 3 0共3页。数据分析管理程序。1目的。收集和分析适当的数据,以确定质量管理体系的有效性 并识别可以实施的改进。2范围。适用于过程 产品监视和测量的数据分析。3职责。3.1质管办是全厂数据分析的归口管理部门,负责对过程和产品特性...