2019智慧树(知到)《数据结构》答案_单元答案_期末答案_知到智慧树答案

大学生都在用的搜题微信公众号:一刻师兄
向它发送题目,秒得答案(支持期末考试答案查询)

2019智慧树(知到)搜题公众号
2019智慧树(知到)《数据结构》答案_单元答案_期末答案_知到智慧树答案 - 2019智慧树(知到)答案 - 课查查

数据结构是计算机程序设计的重要理论技术基础。本课程强调基本数据结构的概念、存储结构的掌握与算法分析、设计的训练,始终以问题为研究对象,按照提出问题、分析问题、解决问题、总结问题的步骤,培养学生运用数据结构的基本理论和算法设计、分析的方法来分析和解决实际问题的能力。


图书馆的数目检索系统采用        关系的数据结构。
是相互之间存在一种或多种特定关系的数据元素的集合。
( )是一个值的集合和定义在这个值集上的一组操作的总称。
算法的确定性是指                      ( )
线性表中的数据元素有一个前驱多个后继。
用顺序结构存储,删除最后一个结点时,( )
链表中逻辑上相邻的元素的物理地址__________相邻。
1.假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原表(即A表和B表)的结点空间构造C表。//将合并逆置后的结果放在C表中,并删除B表StatusListMergeOppose_L(LinkList &A,LinkList &B,LinkList &C){     LinkList pa,pb,qa,qb;     pa=A;     pb=B;     qa=pa;   //保存pa的前驱指针     qb=pb;   //保存pb的前驱指针     pa=pa->next;     pb=pb->next;     A->next=NULL;     C=A;     while(pa&&pb){          if(pa->datadata){               qa=pa;               pa=pa->next;               qa->next=A->next;  //将当前最小结点插入A表表头               A->next=qa;          }          else{               qb=pb;               pb=pb->next;              (           )//将当前最小结点插入B表表头               A->next=qb;          }     }     while(pa){          qa=pa;          pa=pa->next;          qa->next=A->next;          A->next=qa;     }     while(pb){          qb=pb;          pb=pb->next;          qb->next=A->next;          A->next=qb;     }     pb=B;     free(pb);     return OK;}
假设某个单向循环链表的长度大于1,且表中既无头结点也无头指针。已知s为指向链表中某个结点的指针,试编写算法在链表中删除指针s所指结点的前驱结点。StatusListDelete_CL(LinkList &S){     LinkList p,q;     if(S==S->next)return ERROR;     q=S;     p=S->next;     while(       ){          q=p;          p=p->next;     }     q->next=p->next;     free(p);     return OK;}
若以S和X分别表示进栈和退栈操作,则对初始状态为空的栈可以进行的栈操作系列合法的是( );
设计一个迷宫求解的算法,采用___________数据结构最佳。
循环队列存储在数组A[0..m-1],则出队时的操作为( )
1.试写一个算法,识别依次读入的一个以@为结束符的字符序列是否为形如‘序列1&序列2’模式的字符序列。其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列。例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是。BOOLSymmetry(char a[]){     int i=0;     Stack s;     InitStack(s);     ElemType x;     while(a[i]!='&' && a[i]){           _________          i++;     }     if(!a[i]) return FALSE;     i++;     while(a[i]){          Pop(s,x);          if(x!=a[i]){               DestroyStack(s);               return FALSE;          }          i++;     }     return TRUE;}
Status SymmetryString(char* p){ Queue q; if(!InitQueue(q)) return 0; Stack s; InitStack(s); ElemType e1,e2; while(*p){ Push(s,*p); EnQueue(q,*p); p++; } while(!StackEmpty(s)){    (    )           DeQueue(q,e2); if(e1!=e2) return FALSE; } return OK;}
设s=’I AM A STUDENT’ , t=’GOOD’ ,则Concat(Substring(s,6,2),Concat(t,SubString(s,7,8)))=(    )
空串与空格串是相同的,这种说法____。
设串sl=″Data Structures with Java″,s2=“it″,则子串定位函数index(s1,s2)的值为( ) ;
串的长度是指( )
串是一种数据对象和操作都特殊的线性表。
数组A中,每个元素A的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,存放该数组至少需要的单元数是______。
假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A的起始存储位置为1000,计算数组A按行存储时元素A[14]第一个字节的位置( ) ;
若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算,这种观点( )。
广义表( )),a,((b,c),(),d),(((e))))的长度为( ) ;
下面说法不正确的是 (      )。
1.试按教科书5.5节图5.10所示的结点结构编写复制广义表的递归算法。// 由广义表L复制广义表TintCopyGList(GList& T,GList& L){     if(!L) T=NULL;     else{          T=newGLNode;          if(!T)exit(OVERFLOW);          T->tag=L->tag;          if(L->tag==ATOM)T->atom=L->atom;          else{               ________               CopyGList(T->tp,L->tp);          }     }     return OK;}
已知一棵树边的集合为{, , , , , , , , , , , , },问这棵树中结点G的双亲结点为(   )
一棵二叉树中,叶子的个数为10,则其度为2的结点的个数为 (    ) ;
假如一棵二叉树的中序遍历结果为ABCD,则结点A和结点D的关系一定不是( );
已知一棵树边的集合为{, , , , ,
, , , , , , , },将此树转化为二叉树后,E的左孩子为( );
一棵哈夫曼树有17个结点,则其叶子结点的个数是 _________ 。
写递归算法,将二叉树中所有结点的左、右子树相互交换。Status ExchangeBiTree(BiTree& T){     BiTreep;     if(T){          p=T->lchild;          T->lchild=T->rchild;          T->rchild=p;          ExchangeBiTree(T->lchild);       __________ }     returnOK;}
试写一个算法,为一棵二叉树建立后序线索二叉树。StatusPostOrderThreading(BiThrTree& T,BiThrTree& pre);//首先建立后序线索树StatusFindNextInBiThrTree(BiThrTree& q,TElemType *p);//再进行查找 // 后序线索二叉树的算法StatusPostOrderThreading(BiThrTree& Thrt,BiThrTree& T){     BiThrTree pre;     Thrt=new BiThrNode; // 为线索二叉树建立头结点     if(!Thrt) exit(OVERFLOW);     Thrt->LTag=Link;     Thrt->RTag=Thread;     Thrt->rchild=Thrt;// 右子树回指     if(!T) Thrt->lchild=Thrt;// 若二叉树空,左子树回指     else{          Thrt->lchild=T;          pre=Thrt;          PostThreading(T,pre);// 后序遍历进行后序线索化          pre->rchild=Thrt;//最后一个结点线索化          pre->RTag=Thread;          Thrt->rchild=pre;     }     return OK;} StatusPostThreading(BiThrTree& T,BiThrTree& pre){     if(T){          if(T->LTag==Link)PostThreading(T->lchild,pre);          if(T->RTag==Link)PostThreading(T->rchild,pre);          if(!T->lchild){               T->LTag=Thread;              ___________          }          if(pre &&!pre->rchild){               pre->RTag=Thread;               pre->rchild=T;          }          pre=T;     }     return OK;}
1.编写递归算法,将二叉树中所有结点的左、右子树相互交换。StatusExchangeBiTree(BiTree& T){     BiTree p;     if(T){         p=T->lchild;         T->lchild=T->rchild;         T->rchild=p;         ExchangeBiTree(T->lchild);                      }     return OK;}
下图中结点B的出度为(    )
对于一个具有n个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小为( ) ;
采用邻接表存储的图的宽度优先遍历算法类似于二叉树的( )。
下面的无向带权图的最小生成树包含的边有(   )
判定一个有向图是否存在回路除了可以利用拓扑排序方法外,还可以利用( );
编写算法实现建立图的邻接表     StatusCreateAG(ALGraph &G){     int n,e,k,i,j;     cout<>n;     cout<>e;     G.vernum=n;     G.arcnum=e;      // 建立顶点数组     for(k=0;k<G.vernum;k++){          cout<>G.vertices[k].data;          G.vertices[k].firstarc=NULL;     }     // 建立邻接表     VertexType v1,v2;     ArcNode *p,*q;     for(k=0;k<G.arcnum;k++){          cout<>v1>>v2;          i=LocateVex(G,v1);          if(iG.vernum-1) return ERROR;          j=LocateVex(G,v2);          if(jG.vernum-1) return ERROR;          if(i==j)return ERROR;          p=newArcNode;          if(!p)return ERROR;          p->adjvex=j;          p->nextarc=NULL;          q=G.vertices[i].firstarc;          if(!q)G.vertices[i].firstarc=p;          else{               while(q->nextarc) __________     // 指针定位于邻接表的尾结点               q->nextarc=p;          }     }     return OK;}
编写算法实现从邻接表中取出某个顶点V的存储位置。intLocateVex(ALGraph& G,VertexType v){     int i=0;     while(______&&i<G.vernum) i++;     if(G.vertices[i].data==v) return i;     else return -1;}
1. 对线性表进行二分查找时,要求线性表必须( )。
2.下列描述中不符合二叉排序树特点的是 (    )
3.设哈希表长m=14,哈希函数H(key)=key%11。表中已有4个结点:      addr (15)=4;    addr (38)=5;     addr (61)=6;    addr (84)=7     如用二次探测再散列处理冲突,关键字为49的结点的地址是(    )
4.试将折半查找的算法改写成递归算法。 Int  bisearch (sqlist L,int low, int high , elemtype x ) {      If (low>high) return( 0 );       else {                         if (L.data[mid]= =x) return (mid);            else if (L.data[mid]>x) bisearch(L,low,mid-1,x);            else  bisearch(L,mid+1,high,x); }        }//bisearch
5.设计算法判定给定二叉树是否为二叉排序树。 void BSTree(BiTree t,int &flag,int &last);//声明Status IsBSTree(BiTree t){    int flag = 1;    int last =0;    BSTree(t,flag,last);    return flag;}void BSTree(BiTree t,int &flag,int &last)//取地址不需要返回值{    if(t->lchild&&flag) BSTree(t->lchild,flag,last);//遍历左子树    if(t->data.key>last&&flag)  last = t->data.key;else flag=0;//last原为父节点值,但到了树叶节点后被树叶节点的key值覆盖,然后开始向上反馈keyif(t->rchild&&flag)        }
m阶B_树中的m是指?
1.设一组初始记录关键字序列为(50,40,95,20,15,70,60,45),则以增量d=4 的一趟希尔排序结束后前4条记录关键字为( )。
2.快速排序方法在情况下最不利于发挥其长处。(    )
一组记录的排序码为(46,79,56,38,40,84),则利用堆排序的方法建立的初始推为( )。
设一组初始记录关键字序列为(25,50,15,35,80,85,20,40,36,70),其中含有5个长度为2的有序子表,则用归并排序的方法对该记录关键字序列进行一趟归并后的结果为( )。
试以L.r[k+1]作为监视哨改写教科书10.2.1节中给出的直接插入排序算法。其中,L.r[1..k]为待排序记录且k=1; --i )    {    if (L.r[i+1].key L.r[j].key;  ++ j )L.r[j-1] = L.r[j];        // 记录前移}//end if                    }//end for    } // InsertSort
1.编写算法,对n个关键字取整数值的记录序列进行整理,以使所有关键字为负值的记录排在关键字为非负值的记录之前,要求:(1)采用顺序存储结构,至多使用一个记录的辅助存储空间;(2)算法的时间复杂度为O(n);void Divide(int a[ ],int n)//把数组a中所有值为负的记录调到非负的记录之前{low=0;high=n-1;while(              ){while(low=0) high--; //以0作为虚拟的枢轴记录a[low]a[high];while(low<high&&a[low]<0) low++;a[low]a[high];}}//Divide

相关答案