1、4、voidLinkList_reverse(Linklist&L
//链表的就地逆置;为简化算法,假设表长大于2{
p=L->next;q=p->next;s=q->next;p->next=NULL;while(s->next{
q->next=p;p=q;
q=s;s=s->next;//把L的元素逐个插入新表表头}
q->next=p;s->next=q;L->next=s;}//LinkList_reverse2、设t是给定的一棵二叉树,下面的递归程序count(t用于求得:二叉树t中具有非空的左,右两个儿子的结点个数N2;只有非空左儿子的个数NL;只有非空右儿子的结点个数NR和叶子结点个数N0。N2、NL、NR、N0都是全局量,且在调用count(t之前都置为0.typedefstructnode
{intdata;structnode*lchild,*rchild;}node;intN2,NL,NR,N0;voidcount(node*t
{if(t->lchild!=NULLif(1___N2++;elseNL++;elseif(2___NR++;else(3__;
if(t->lchild!=NULL(4____;if(t->rchild!=NULL(5____;}
26.树的先序非递归算法。voidexample(bbtree*b;
{btree*stack[20],*p;inttop;if(b!=null
{top=1;stack[top]=b;while(top>0
{p=stack[top];top--;printf(“%d”,p->data;if(p->rchild!=null{(1___;(2___;}
if(p->lchild!=null(3___;(4__;}}}}
3、(1p->rchild(2p->lchild(3p->lchild(4ADDQ(Q,p->lchild(5ADDQ(Q,p->rchild
25.(1t->rchild!=null(2t->rchild!=null(3N0++(4count(t->lchild(5count(t->rchild
26..(1top++(2stack[top]=p->rchild(3top++(4stack[top]=p->lchild
27.(1*ppos//根结点(2)rpos=ipos(3rpos–ipos(4ipos(5ppos+1
4、题目中要求矩阵两行元素的平均值按递增顺序排序,由于每行元素个数相等,按平均值排列与按每行元素之和排列是一个意思。所以应先求出各行元素之和,放入一维数组中,然后选择一种排序方法,对该数组进行排序,注意在排序时若有元素移动,则与之相应的行中各元素也必须做相应变动。
voidTranslation(float*matrix,intn)
//本算法对n×n的矩阵matrix,通过行变换,使其各行元素的平均值按递增排列。{inti,j,k,l;
floatsum,min;//sum暂存各行元素之和float*p,*pi,*pk;for(i=0;i
{sum=0.0;pk=matrix+i*n;//pk指向矩阵各行第1个元素.
for(j=0;j求一行元素之和.*(p+i=sum;//将一行元素之和存入一维数组.}//fori
for(i=0;i用选择法对数组p进行排序{min=*(p+i;k=i;//初始设第i行元素之和最小.
for(j=i+1;j记新的最小值及行号.if(i!=k//若最小行不是当前行,要进行交换(行元素及行元素之和{pk=matrix+n*k;//pk指向第k行第1个元素.pi=matrix+n*i;//pi指向第i行第1个元素.for(j=0;j交换两行中对应元素.
{sum=*(pk+j;*(pk+j=*(pi+j;*(pi+j=sum;}
sum=p[i];p[i]=p[k];p[k]=sum;//交换一维数组中元素之和.}//if}//fori
free(p;//释放p数组.}//Translation
[算法分析]算法中使用选择法排序,比较次数较多,但数据交换(移动