1、设计计算二叉树中所有结点值之和的算法:
void acount(bitree *bt,int &sum)
{
if(bt!=0)
sum=sum+bt->key;
acount(bt->lchild);
acount(bt->rchild);
}
2、设计一个链式存储结构上统计二叉树中结点个数的算法:
typedef struct node{
int key;
struct node *lchild,*rchild;
}bitree;
void statisticsNode(bitree *t,int *&count)
{
if(t!=0)
count++;
statisticsNode(t->lchild);
statisticsNode(t->rchild);
}
3、设计一个算法将无向图的邻接矩阵转为对应邻接表的算法
typedef struct{int vertex[m];int edge[m][m];}gadjmatrix;
typedef struct node1{int info;int adjvertex;struct node1 *nextarc;}glinklistnode;
typedef struct node2{int vertexinfo;glinklistnode *firstarc;}glinkheadnode;
void adjmatrixtoadjlist(gadjmatrix g1[],glinkheadnode g2[])
{
int i,j;
glinklistnode *p;
for(i=0;i<=n-1;i++) g2[i].firstarc=0;
for(i=0;i<=n-1;i++) for(j=0;j<=n-1;j++)
if(g1.edge[i][j]==1)
{
p=(glinklistnode *)malloc(sizeof(glinklistnode));
p->adjvertex=j;
p->nextarc=g[i].firstarc;
g[i].firstarc=p;
p(glinklistnoe *)malloc(sizeof(glinklistnode));
p->adjvertex=i;
p->nextarc=g[j].firstarc;
g[j].firstarc=p;
}
}
4、设计将所有奇数移到所有偶数之前的算法:
void quickpass(int r[],int s,int t)
{
int i=s,j=t,x=r[s];
while(i<j)
while(i<j && r[j]%2==0) j=j-1;
if(i<j) r[i]=r[j];i=i+1;
while(i<j && r[i]%2==1) i=i+1;
if(i<j) r[j]=r[i]; j=j-1;
r[i]=x;
}
5、设计判断单链表中元素是否是递增的算法:
int isriselk(lklist *head)
{ /* 0表示是,1表示不是 */
lklist *q,*p;
if(head==0 || head->next==0) return(1);
else
for(q=head,p=head->next;p!=0;q=p,p->next)
if(q->data>p->data) return(0);
return(1)
}
6、设计在链式存储结构上合并排序的算法:结点关键值有序
void mergelklist(lklist *ha,lklist *hb,lklist *&hc)
{
lklist *s=hc=0;
while(ha!=0 && hb!=0)
if(ha->data<hb->data)
{
if(s==0) hc=s=ha;
else
{
s->next=ha;s=ha;
}
ha=ha->next;
}
else
{
if(s==0) hc=s=hb;
else
{
s->next=hb;
s=hb;
}
hb=hb->next;
}
if(ha==0) s->next=hb;
else s->next=ha;
}