~~08|2.03|2|8
^^统计出没带头结点的单链表HL中结点的值等于给定值x的结点数。 int CountX(LNode* HL,ElemType x)。
int CountX(LNode* HL, ElemType x)
{
int i=0;
LNode* p=HL;
while(p!=NULL)
{
if (P->data==x) i++;
p=p->next;
}
return i;
}
~~08|2.03|2|8
^^统计出带头结点的单链表HL中结点的值等于给定值X的结点数。 int CountX(LNode* HL,ElemType x)。
int CountX(LNode* HL, ElemType x)
{
int i=0;
LNode* p=HL->next;
while(p!=NULL)
{
if (P->data==x) i++;
p=p->next;
}
return i;
}
~~08|2.03|2|8
^^计算出没带头结点的单链表HL中所有结点的值(结点元素类型为整型)之和。 int Sum(LNode* HL)。
int Sum(LNode* HL)
{
int sum=0;
LNode* p=HL;
while(p!=NULL)
{
sum+=p->data;
p=p->next;
}
return sum;
}
~~08|2.03|2|8
^^计算出带头结点的单链表HL中所有结点的值(元素类型为整型)之和。 int Sum(LNode* HL)。
int Sum(LNode* HL)
{
int sum=0;
LNode* p=HL->next;
while(p!=NULL)
{
sum+=p->data;
p=p->next;
}
return sum;
}
~~08|2.03|2|8
^^计算出没带头结点的单链表HL中所有结点的值(元素类型为整型)之平均值。 float Aver(LNode* HL)。
^^float Aver(LNode* HL)
{
int sum=0;
float num=0;
LNode* p=HL;
while(p!=NULL)
{
sum+=p->data;
num++;
p=p->next;
}
return (float)sum/num;
}
~~08|2.03|2|8
^^计算出带头结点的单链表HL中所有结点的值(元素类型为整型)之平均值。 float Aver(LNode* HL)。
^^float Aver(LNode* HL)
{
int sum=0;
float num=0;
LNode* p=HL->next;
while(p!=NULL)
{
sum+=p->data;
num++;
p=p->next;
}
return (float)sum/num;
}
~~08|6.03|2|8
^^设计先序遍历二叉树的算法。
^^typedef struct node {
datatype data;
struct node *lchild,*rchild;
} bitree;
void Preorderbitree(bitree *bt)
{
if(bt)
{
visit(bt->data);
Preorder(bt->lchild);
Preorder(bt->rchild);
}
}
~~08|6.03|2|8
^^设计中序遍历二叉树的算法。
^^typedef struct node {
datatype data;
struct node *lchild,*rchild;
} bitree;
void Inorderbitree(bitree *bt)
{
if(bt)
{
Preorder(bt->lchild);
visit(bt->data);
Preorder(bt->rchild);
}
}
~~08|6.03|2|8
^^设计后序遍历二叉树的算法。
^^typedef struct node {
datatype data;
struct node *lchild,*rchild;
} bitree;
void Postorderbitree(bitree *bt)
{
if(bt)
{
Preorder(bt->lchild);
Preorder(bt->rchild);
visit(bt->data);
}
}
~~08|6.03|3|8
^^设计按层次遍历二叉树的算法。
^^typedef struct node {
datatype data;
struct node *lchild,*rchild;
} bitree;
void Levelorder(bitree T)
{
int front = 0, rear = 1;
BinTNode *cq[Max], *p;
cq[1] = T;
while(front != rear)
{
front = (front + 1) % NodeNum;
p = cq[front];
printf("%c ", p->data);
if(p->lchild != NULL)
{
rear = (rear + 1) % NodeNum;
cq[rear] = p->lchild;
}
if(p->rchild != NULL)
{
rear = (rear + 1) % NodeNum;
cq[rear] = p->rchild;
}
}
}
~~08|6.03|2|8
^^设计求二叉树叶子结点个数的算法。
^^typedef struct node {
datatype data;
struct node *lchild,*rchild;
} bitree;
Int CountLeaf(bitree *bt)
{
Int count;
if (bt==NULL) return 0;
if (bt->lchild ==NULL && bt->rchild ==NULL) return(1);
count = CountLeaf(bt->lchild)+ CountLeaf(bt->rchild);
return count;
}
~~08|6.03|2|8
^^设计判断两个二叉树是否相同的算法。
^^typedef struct node {
datatype data;
struct node *lchild,*rchild;
} bitree;
int Judgebitree(bitree *bt1,bitree *bt2)
{
if (bt1==0 && bt2==0) return(1);
else if (bt1==0 || bt2==0 ||bt1->data!=bt2->data) return(0);
else return(judgebitree(bt1->lchild,bt2->lchild)*judgebitree(bt1->rchild,bt2->rchild));
}
~~08|7.03|2|8
^^编写一个算法,求出邻接表表示的有向图中序号为numb的顶点的出度(注意:可用高级语言,伪代码、流程图作答,任何一种作答方式等效)。
int OutDegree(GraphL & gl, int numb)
^^int OutDegree (GraphL & gl, int numb)
{ int d=0, i;
vexnode * p=gl.adjlist[numb];
while (p!=NULL)
{ d++;
p=p->next;
}
return (d);
}
~~08|7.03|2|8
^^编写一个算法,求出邻接表表示的有向图中序号为numb的顶点的入度(注意:可用高级语言,伪代码、流程图作答,任何一种作答方式等效)。
int InDegree(GraphL & gl, int numb)
^^int InDegree (GraphL & gl, int numb)
{ int d=0, i;
vexnode * p=gl.adjlist[numb];
for(i=0; i<gl.vexnum; i++)
{ p=gl.adjlist[i];
while(p!=NULL)
{ if(p->vertex= =numb) d++;
p=p->next;
}
}
return (d);
}
~~08|7.03|2|8
^^编写图的深度优先搜索算法(注意:可用高级语言,伪代码、流程图作答,任何一种作答方式等效)。
^^Boolean visited[MaxVertexNum];
void DFS(MGraph *G)
{
int i;
for(i = 0; i < G->n; i++)
visited[i] = FALSE;
for(i = 0; i < G->n; i++)
if(!visited[i])
DFSM(G,i);
}
~~08|7.03|2|8
^^编写图的广度优先搜索算法(注意:可用高级语言,伪代码、流程图作答,任何一种作答方式等效)。
^^Boolean visited[MaxVertexNum];
void BFS(MGraph *G, int k)
{
int i, j, f = 0, r = 0;
int cq[MaxVertexNum];
for(i = 0; i < G->n; i++)
visited[i] = FALSE;
for(i = 0;i < G->n; i++)
cq[i] = -1;
printf("%c", G->vexs[k]);
visited[k] = TRUE;
cq[r] = k;
while(cq[f]!=-1)
{
i = cq[f];
f = f + 1;
for(j = 0; j < G->n; j++)
{
if(G->edges[i][j]==1 && !visited[j])
{
printf("%c", G->vexs[j]);
visited[j] = TRUE;
r = r + 1;
cq[r] = j;
}
}
}
}
~~08|7.03|2|8
^^编写一个算法,求出邻接表表示的无向图中序号为numb的顶点的度(注意:可用高级语言,伪代码、流程图作答,任何一种作答方式等效)。
int Degree(GraphL & gl, int numb)
^^int Degree (GraphL & gl, int numb)
{ int d=0, i;
vexnode * p=gl.adjlist[numb];
for(i=0; i<gl.vexnum; i++)
{ p=gl.adjlist[i];
while(p!=NULL)
{ if(p->vertex= =numb) d++;
p=p->next;
}
}
return (d);
}
~~08|7.03|3|8
^^编写一个算法,求出邻接表表示的有向图中序号为numb的顶点的度(注意:可用高级语言,伪代码、流程图作答,任何一种作答方式等效)。
int Degree(GraphL & gl, int numb)
^^int Degree (GraphL & gl, int numb)
{ int d=0, i;
vexnode * p=gl.adjlist[numb];
while (p!=NULL)
{ d++;
p=p->next;
} //求出顶点numb的出度
for(i=0; i<gl.vexnum; i++)
{ p=gl.adjlist[i];
while(p!=NULL)
{ if(p->vertex= =numb) d++;
p=p->next;
}
}//求出顶点numb的入度
return (d); //返回顶点numb的度数
}