数据结构(C语言)题库-计算题

~~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的度数

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值