`

武汉科技大学2006年数据结构考研试题答案

阅读更多

一、
void c1_1(Linklist A, Linklist B, Linklist &C)
{
        LNode *pa=A->next, *pb=B->next,*pc,*s,*r;
        C=( LNode*)malloc(sizeof(LNode));
        C->next=null;
        r=C;
        while(pa)
        {
                s=( LNode*)malloc(sizeof(LNode));
                s->data=pa->data;s->next=null;
                r->next=s;r=s;
                pa=pa->next;
}
while(pb)
{
        pc=C->next;
        while(pc&&pb->data!=pc->data)
                pc=pc->next;
        if(pc==null)
        {
                s=( LNode*)malloc(sizeof(LNode));
                s->data=pb->data;s->next=null;
                r->next=s;
                r=s;
}
        pb=pb-next;
}
}
void c1_2(Linklist A, Linklist B, Linklist &C)
{
        LNode *pa=A->next, *pb, *s,*r;
        C=( LNode*)malloc(sizeof(LNode));
        C->next=null;
        r=C;
        while(pa)
        {        pb=B->next;
                while(pb&&pb->data!=pa->data)
                        pb=pb->next;
        if(pb==null)
        {
                s=( LNode*)malloc(sizeof(LNode));
                s->data=pa->data;s->next=null;
                r->next=s;
                r=s;
}
        pa=pa-next;
}
}

int ListLength(LinkList L)
{ /*
初始条件:线性表L已存在。操作结果:返回L中数据元素个数 */
   int i=0;
   LinkList p=L->next; /* p
指向第一个结点 */
   while(p) /*
没到表尾 */
   {
     i++;
     p=p->next;
   }
   return i;
}
二、
Typedef struct Lnode{
        ElemType data;
        char sex;
        floar stature;
        struct LNode *next;
}LNode,*Linklist;
void DisCreat(LinkedList A)
{
LinkedList B,C;
LNode *p,*r,*b1,*b2,*c1,*c2;
B=C=null;
p=A;
p为工作指针。
while(p)
{r=p->next;
∥暂存p的后继。
if (p->sex==’M’)
∥男生放入B表。
{if(B==null){p->next=null;B=p;}
else{b1=null;b2=B;
                while(b2&&p->stature>b2->stature)
{b1=b2;b2=b2->next;}
p->next=b2; b1->next=p;}
                }
else
∥女生放入C
{if(C==null){p->next=null;C=p;}
else{c1=null;c2=C;
                while(c2&&p->stature>c2->stature)
{c1=c2;c2=c2->next;}
p->next=c2; c1->next=p;}
        }
p=r;
p指向新的待处理结点。
}
三、
采用输出受限的双端队列
void Train_Rearrange(char *train)
//
这里用字符串train表示火车,’P’表示硬座,’H’表示硬卧,’S’表示软卧。
{
   r=train;
   InitDQueue(Q);
   while(*r)
   {
      if(*r=‘P’)
      {
         
不入队列,直接输出;
      }
      else if(*r=‘S’)
      {
         EnDQueue(Q, *r, 0);//
从头端入队
      }
      else
      {
         EnDQueue(Q, *r, 1);//
从尾端入队
}
r++;
   }//while
   while(!DQueueEmpty(Q))
   {
      DeDQueue(Q);//
从头端出队
   }//while
}//Train_Rearrange
四、
(1)
void compress (int A[n][n], int B[ ], int n)
{//
将三对角矩阵A[0..n-1, 0..n-1]三条对角线上的元素逐行存放于数组B
K=0;
for (i=0; i<n; i++)
    for (j=0; j<n; j++)
      if (A[j]!=0) B[k++]= A[j];
}
(2)
已知kij时,则下标的对应关系是:
i = (k+1)/3
j = k-2i
void uncompress (int B[ ], int A[n][n], int n)
{//
由数组B[0..3n-3]确定三对角矩阵A[0..n-1, 0..n-1]
for (i=0; i<n; i++)
    for (j=0; j<n; j++)
A[j] =0;
  for(k=0; k<=3*n-3; k++)
    { i=(k+1)/3;
     j=k-2*i;
    A[j]=B[k];
    }
}
(3)
void TransMatrix(int B[ ], int C[ ],int n)
{
        C[0]=B[0];
        For(k=1;k<n;k++)
        {        C[k+1]=B[k];
                k++;
                C[k-1]=B[k];
                k++;
                C[k]=A[k];
        }
}
五、
用二叉树表示该大家族,可以用根结点表示父或母(祖先),根结点的左子女表示配偶,配偶的右子女表示子女。这种二叉树可以看成类似树的孩子兄弟链表表示法;根结点是父或母,根无右子女,左子女表示配偶,配偶的右子女(右子女的右子女等)均可看成兄弟姐妹(即父母的所有子女),这些结点又可成为新的双亲。首先递归查找某家族成员结点,若查找成功,要么其左子女是配偶,配偶的右子女及右子女的右子女等均为父母的子女,要么其右子女及右子女的右子女等均为父母的子女。
BiTree Search(BiTree t,ElemType parent)//
在二叉树上查找值为parent的结点
{if(t==null) return (null);            //
二叉树上无parent结点
else if(t->data==parent) return(t);   //
查找成功
p=Search(t->lchild, parent); p=Search(t->rchild, parent); }
}//
结束Search
void PrintSons(BiTree t,ElemType p)//
在二叉树上查找结点值为p的所有的子女
{p=Serach(t,p);                     //
在二叉树t上查找父结点p
if(p!=null)                        //
存在父结点
{
if(p->lchild!=null){q=p->lchild; q=q->rchild;}
//
先指向其配偶结点,再找到第一个子女
else q=p->rchild;
   while(q!=null) {printf(q->data); q=q->rchild;} //
输出所有子女
     }
}//
结束PrintSons
六、
该题可用求每对顶点间最短路径的FLOYD算法求解。求出每一顶点到其它顶点的最短路径。在每个顶点到其它顶点的最短路径中,选出最长的一条。因为有n个顶点,所以有n,在这n条最长路径中找出最短一条,它的出发点为所求。
void Signal(AdjMatrix w,int n)
{for (k=1;k<=n;k++) //
求任意两顶点间的最短路径
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (w[k]+w[k][j]<w[j]) w[j]=w[k]+w[k][j];
m=MAXINT; //
设定m为机器内最大整数。
for (i=1;i<=n;i++) //
求最长路径中最短的一条。
{s=0;
for (j=1;j<=n;j++) //
求从某地区i1<=i<=n)到其它地区的最长路径。
if (w[j]>s) s=w[j];
if (s<=m) {m=s; k=i;}//
在最长路径中,取最短的一条。m记最长路径,k记出发顶点的下标。
Printf(“
供应站应建在%d地区\n”,i);
}//for
}
七、
void FindInDegree(ALGraph G,int indegree[])
{ /*
求顶点的入度*/
   int i;
   ArcNode *p;
   for(i=0;i<G.vexnum;i++)
     indegree=0; /*
赋初值 */
   for(i=0;i<G.vexnum;i++)
   {
     p=G.vertices.firstarc;
     while(p)
     {
       indegree[p->adjvex]++;
       p=p->nextarc;
     }
   }
}
typedef int SElemType; /*
栈类型 */
Status TopologicalSort(ALGraph G)
{ /*
有向图G采用邻接表存储结构。若G无回路,则输出G的顶点的一个拓扑序列并返回OK,否则返回ERROR*/
   int i,k,count,indegree[MAX_VERTEX_NUM],term;
   SqStack S1,S2;
   ArcNode *p;
   FindInDegree(G,indegree); /*
对各顶点求入度indegree[0..vernum-1] */
   InitStack(&S1); /*
初始化栈 */
InitStack(&S2);
   for(i=0;i<G.vexnum;++i) /*
建零入度顶点栈S */
     if(!indegree)
       Push(&S1,i); /*
入度为0者进栈 */
   count=0; /*
对输出顶点计数 */
        term=1;//
学期
   while(!StackEmpty(S1))
   { /*
栈不空 */
     while(!StackEmpty(S1))
{Pop(&S,&i); Push(&S2,i)}
         if (!StackEmpty(S2))
{ printf("
%d个学期的课程有:",term);
StackTraverse(S2,print);
term++;
}
while(!StackEmpty(S2))
{
     ++count;
     for(p=G.vertices.firstarc;p;p=p->nextarc)
     { /*
i号顶点的每个邻接点的入度减1 */
       k=p->adjvex;
       if(!(--indegree[k])) /*
若入度减为0,则入栈 */
         Push(&S1,k);
}
}
   }
   if(count<G.vexnum) return ERROR;
   else  return OK;
}
八、
该问题类似于五叉路口交通灯的设计,采用无向图的数据结构,将每个项目视为顶点,凡是一个运动员同时报名参加的项目,表示不能在同一单位时间进行,则用边连接发生冲突的顶点,然后进行染色分析。
//
判断图g中的第i个结点是否与所有已着色为count的结点都不相邻
bool isnotadjacent(ALGraph& g, int i, int count)
{
    EdgeNode* p=g.vertices.firstedge ;  //p
指向邻接表第i个结点的链表头
    while(p){
        if(g.vertices [p->adjvex].color ==count)
            return false;
        p=p->nextedge;
    }
    return true;
}

//
判断图g是否已全部着色
bool isallcolored(ALGraph& g)
{
    for(int i=0;i<g.vexnum;i++)
        if(g.vertices.color==0)
            return false;
    return true;
}

//
依图中结点的度数从大到小的顺序给图着色,返回着色数
int color(ALGraph& g)
{
    int i;
    int count=0;  //
记录着色数
    while(!isallcolored(g))
    {
        count++;
        for(i=0;i<g.vexnum;i++)
            if(g.vertices.color==0){
                g.vertices.color=count;
                break;
            }  //
先找到第一个未着色的结点进行着色
        for(i++;i<g.vexnum;i++){
            //
如果第i个结点尚未着色并且该结点与刚着色为count的结点
            //
都不相邻,则将该结点着色为count
            if(g.vertices.color==0 && isnotadjacent(g,i,count))
                g.vertices .color=count;
        }//for
    }//while
    return count;

分享到:
评论

相关推荐

    北京科技大学2002年数据结构考研试题及答案

    北京科技大学2002年的数据结构考研试题及答案,是对于这一主题深入学习和理解的重要参考资料,对备考者来说具有极高的价值。 一、数据结构的基本概念 数据结构不仅仅是数据的简单集合,它涉及到数据的逻辑结构(如...

    北京科技大学2000年数据结构考研试题及答案

    北京科技大学2000年的数据结构考研试题及答案,是对于准备考取该学校研究生的同学来说,非常宝贵的学习资源。 数据结构主要包含以下几个关键知识点: 1. **数组**:最基础的数据结构,用于存储同类型元素的集合。...

    北京科技大学2001年数据结构考研试题及答案

    数据结构是计算机科学与技术专业的重要基础...总的来说,北京科技大学2001年数据结构考研试题及答案是一份宝贵的教育资源,它能够帮助学生系统地复习数据结构的知识,提高分析和解决问题的能力,为考研做好充分准备。

    北京科技大学2006年组成原理及数据结构考研试题及答案

    在准备北京科技大学2006年的考研试题时,考生不仅要掌握这些理论知识,还要能够解决实际问题,包括分析问题、设计合理的数据结构和算法,以及编写和调试代码。同时,熟悉计算机组成原理与数据结构之间的联系,如硬件...

    [kaoyan.com]2005年中国地质大学_武汉_数据结构考研试题-1.pdf

    根据所提供的文件信息,文件标题表明了内容的性质,即这是一份中国地质大学(武汉)2005年的数据结构考研试题。虽然无法直接访问文件的具体内容,但可以通过标题和描述推断出文档中可能涵盖的知识点,并结合数据结构...

    算法与数据结构考研试题精析第3版

    《算法与数据结构考研试题精析》收集了自1992年以来国内60余所重点高校和科学院、所300多套硕士研究生入学“算法与数据结构”考试试卷的1600多道试题,并给出了参考答案和分析。《算法与数据结构考研试题精析》可以...

    北京师范大学08年考研程序设计与数据结构试题

    【标题】"北京师范大学08年考研程序设计与数据结构试题"揭示了这是一份针对2008年度北京师范大学研究生入学考试的编程与数据结构科目的试题集。这个题目通常涵盖计算机科学与技术专业的重要基础课程,是衡量考生编程...

    中南大学943数据结构历年考研真题汇编及部分参考答案

    数据结构是计算机科学与技术专业的重要基础课程,它研究如何在计算机中组织和管理数据,以便高效地进行存储、检索和处理。中南大学作为国内知名的高等学府,其943数据结构课程的考研真题汇编是考生备考的重要参考...

    长沙理工大学数据结构真题+答案【2006-2020长沙理工大学数据结构初试真题+答案】

    长沙理工大学数据结构真题+答案【2006-2020长沙理工大学数据结构初试真题+答案 长沙理工大学考研数据结构真题,包含近十年初试真题+答案,和近几年复试真题。本人花钱购买的,已上岸。考试代码850;真题加答案

    算法与数据结构考研试题精析

    标题《算法与数据结构考研试题精析》和描述“算法与数据结构历年考研试题分析与答案解析。主要就是拿来练练手”表明本文将深入探讨算法与数据结构的核心知识点,并通过历年考研试题的形式加以练习和巩固。由于提供的...

    吉林大学数据结构考研试题

    在吉林大学2000年的计算机综合数据结构考研试题中,可能会涉及到以下知识点: 1. **线性数据结构**:包括数组、链表、栈和队列。数组是最基础的数据结构,提供了随机访问元素的能力;链表则允许动态插入和删除,但...

    数据结构试题分章节考研题及答案.rar

    历年数据结构考研题及答案,分章节管理第一章、绪论 试题 参考答案 第二章、线性表 试题 参考答案 第三 章、栈和队列 试题 参考答案 第四章、串 试题 参考答案 第五章、数组和广义表 试题 参考答案 第六章、...

    武汉大学考研数据结构试题part_1

    武汉大学遥感信息工程学院的考研数据结构试题,反映了该学院对这个领域的重视和对学生深入理解数据结构能力的要求。这份试题集包含2002年至2007年的部分考题,对于准备考研的学生来说,是一份宝贵的参考资料。 在...

    2010-2018年南京邮电大学811数据结构考研真题及参考答案

    南京邮电大学811数据结构的考研真题及参考答案,对于备考这门科目以及理解数据结构的重要性具有极大的帮助。 在数据结构的学习中,首先会接触到线性数据结构,如数组、链表、栈和队列。数组是最基本的数据结构,...

    数据结构考研试题精选及答案.rar

    东北大学2000年数据结构试题.doc 动态存储管理答案.doc 北京邮电大学1999年数据结构试题.doc 清华大学2000年硕士生入学考试数据结构与程序设计试题.doc 第 5 章 数组和广义表.doc 第10章 排序.doc 第10章 排序...

    清华大学2001年数据结构与程序设计考研试题

    综上所述,清华大学2001年的数据结构与程序设计考研试题全面覆盖了数据结构、程序设计、算法及其实战应用等多个方面,旨在评估考生的综合计算机科学素养。无论时间如何流逝,这些基础知识和技能始终是计算机专业人士...

    武汉理工大学2005年数据结构试题

    武汉理工大学2005年的研究生入学考试试题中涉及了数据结构的基本概念、算法分析以及特定数据结构的操作。 1. 算法是解决某一问题的有限运算序列,用于描述计算机执行的步骤。算法分析的目的是评估算法的效率,通常...

    数据结构\数据结构考研试题精选及答案

    数据结构是计算机科学与技术专业的重要基础课程,它主要研究数据如何在计算机中组织和管理,以便高效地进行存储、检索和处理。本资源“数据结构\数据结构考研试题精选及答案”是一份针对考研复习的数据结构专项资料...

    北京邮电大学数据结构考研试题

    北京邮电大学作为中国顶尖的信息科技学府,其数据结构考研试题无疑代表了这一领域的高水准和深度。1998年的试题为我们提供了一个窗口,让我们能够洞察当时的教育重点和考试趋势。 在数据结构的学习中,我们通常会...

Global site tag (gtag.js) - Google Analytics