2019安徽省数据分析入门

发布 2023-12-26 21:50:09 阅读 3035

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质管办是全厂数据分析的归口管理部门,负责对过程和产品特性...