(完整版)数据结构(c语言版)复习知识点2017

(完整版)数据结构(c语言版)复习知识点2017
(完整版)数据结构(c语言版)复习知识点2017

第一章绪论

1.1数据、数据元素、数据项、数据结构等基本概念

1.数据(data):客观事物的符号表示,在计算机科学中指所有能输入计算机中并被计算机处理的符号总称。整数、浮点数、字符串、声音、图像。

2.数据元素(dataelement):数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。

3.一个数据元素可能由若干个数据项(dataitem)组成。数据元素是一个数据整体中相对独立的单位。但它还可以分割成若干个具有不同属性的项(字段)。故不是组成数据的最小单位。数据项是构成数据的最小单位。

4.数据对象(dataobject):性质相同的数据元素的集合,是数据的一个子集。

5.数据结构(datastructure):数据元素以及数据元素之间存在的关系。

6.数据结构主要描述:数据元素之间的逻辑关系、数据在计算机系统中的存储方式和数据的运算,即数据的逻辑结构、存储结构和数据的操作集合

1.2数据结构的逻辑结构、存储结构的含义及其相互关系

1.数据的逻辑结构:用形式化方式描述数据元素间的关系。数据的逻辑结构独立于计算机,是数据本身所固有的。用于算法的设计。

两大类逻辑结构:线性结构(线性表、栈、队列、数组和串),非线性结构(树和图)。

2.数据的物理结构(也称存储结构):数据在计算机中的具体表示。包括数据元素的表示和关系的表示。存储结构是逻辑结构在计算机存贮器中的映像,必须依赖于计算机。用于算法的实现。

数据的存储方式可分为如下两类:顺序存储、链接存储。

1.3算法

1.算法的定义:算法是对特定问题求解步骤的一种描述,是指令的有限序列。

2.算法的特性:

有穷性——算法必须在执行有穷步之后结束,而且每一步都可在有穷时间内完成

确定性——每条指令无二义性。并且,相同的输入只能得到相同的输出;

可行性——算法中描述的每一操作,都可以通过已实现的基本运算来实现。

输入——算法有零至多个输入。输出——算法有一个至多个输出

3.算法效率的度量:时间复杂度和空间复杂度及计算。

第二章线性表

2.1线性表的逻辑结构特征

存在唯一的一个被称作第一个的数据元素;存在唯一的一个被称作最后一个的数据元素;除第一个元素之外,集合中的每个数据元素均只有一个前驱;除最后一个元素之外,集合中的每个数据元素均只有一个后继。

2.2线性表的顺序存储结构

1.用一组连续的存储单元依次存储线性表的数据元素。在线性表的顺序存储表示中,只要确定了线性表的起始位置,线性表中任一数据元素都可随机存取。线性表的顺序存储结构是一种随机存取的存储结构。

LOC(ai+1)=LOC(ai)+1

LOC(ai+1)=LOC(a1)+i*1

LOC(ai)表示元素ai的存储位置;LOC(a1)表示第一个数据元素的存储位置,通常称为线性表的起始位置或基地址每个数据元素占用1个存储单元。

2.线性顺序表上的插入是指在第i(1≤i≤n+1)个位置插入一个新的数据元素,需将第i至第n共(n-i+1)个元素后移

注意:

?顺序表中数据区域有listSize个存储单元,所以在向顺序表中做插入时先检查表空间是否满了,在表满的情况下不能再做插入,否则产生溢出错误。

?要检验插入位置的有效性,这里i的有效范围是:1<=i<=n+1,其中n为原表长。

?注意数据的移动方向

算法时间复杂度

移动元素个数:n-i+1

平均移动元素个数:n/2

T(n)=O(n);

3.线性顺序表上的删除是指第i(1≤i≤n)个数据元素删除掉,需将第i+1至第n共(n-i)个元素前移注意:

?删除第i个元素,i的取值为1<=i<=n,否则第i个元素不存在,因此,要检查删除位置的有效性。

?当表空时不能做删除。

?删除ai之后,该数据已不存在,如果需要,先取出ai,再做删除。

算法时间复杂度:

移动元素个数:n-i

平均移动元素个数:(n-1)/2

T(n)=O(n);

4.线性表的顺序存储。

优点:逻辑相邻,物理相邻可以实现数据元素的随机存取;

缺点:在作插入或是删除操作时,需要移动大量数据元素

2.3线性表的链式存储结构

1.线性表链式存储结构的特点:用一组任意的存储单元存储线性表的数据元素。在线性表的链式存储中,在进行插入或是删除操作时,不需要进行数据元素的移动,但不能实现数据元素的随机存取。

2.线性链表的表示:数据元素、数据元素之间的关系;数据域存储数据元素,指针域存储数据元素之间的关系:直接后继的存储位置,线性链表:每个节点只包含一个指针域

3.假定指针p指向线性链表中的第i个数据元素,则p->next为指向线性链表中第i+1个数据元素的指针。即p->data为ai,p->next->data为ai+1。

(*p)表示p所指向的结点

(*p).data p->data表示p指向结点的数据域

(*p).next p->next表示p指向结点的指针域

4.在单链表中查找第i个元素

StatusgetElem_L(LinkListL,inti,ElemType&e){ //获取线性链表中的第i个数据元素p=L->next;j=1;

while(p&&j

{

p=p->next;++j;

}

if(!p‖j>i)returnERROR;

returnp->data;

}//GetElem_L

5.在单链表中插入数据元素

S->next=P->next;

P->next=S;

StatuslistInsert_L(LinkList&L,inti,ElemTypee){

p=L;j=0;

while(p&&jnext;++j;

}

if(!p‖j>i-1)returnERROR;

s=(LinkList)malloc(sizeof(LNode));s->data=e;

s->next=p->next;p->next=s;

return OK;

}

6.在单链表中删除数据元素

P->next=P->next->next; 或

q=p->next;

p->next=q->next;free(q);

StatuslistDelete_L(LinkList&L,inti){

p=L;j=0;

while(p->next&&j

p=p->next;++j;

}

if(!(p->next) ‖ j>i-1)

return ERROR;//删除位置不合理q

=p->next;

p->next=q->next;free(q);//删除并释放结点

return OK;

}//ListDelete_L

7.循环链表:表中最后一个结点的指针域指向头结点,整个链表形成一个环。

循环链表的操作和单链表基本一致,差别仅在于,判别链表中最后一个结点的条件不再是"后继是否为空",而是"后继是否为头结点"。

(1)单链表p或p->next==NULL

(2)循环链表p->next==L

8.双向链表有两个指针域,一个指向直接前驱,一个指向直接后继。

1)向双向链表中插入一个结点:

s->prior=p->prior;

p->prior->next=s;

s->next=p;

p->prior=s;

2)向双向链表中插入一个结点::

s->prior=p;

s->next=p->next;

p->next->prior=s;

p->next=s;

3)从双向链表中删除一个结点

①p->prior->next=p->next;

②p->next->prior=p->prior;

第三章栈和队列

3.1栈和队列的逻辑结构特征

1.栈(stack)和队列(queue)是两种重要的线性结构,特殊性在于其基本操作是线性表操作的子集,是操作受限的线性表(操作限定在两个端点进行),为具有限定性的数据结构。栈按“后进先出”的规则进行操作,队列按“先进先出”的规则进行操作。

2.栈是限定在表尾进行插入和删除操作的线性表。允许插入,删除的一端称为栈顶(top),另一端称为栈底(bottom)。

3.栈的基本运算主要有两个:Push(S,e),进栈,插入(压入)元素e为新的栈顶元素,Pop(S),出栈,删除(弹出)S的栈顶元素。如:若元素入栈的顺序为1234,为了得到1342出栈顺序,操作序列为:Push(S,1),Pop(S),Push(S,2),Push(S,3),Pop(S),Push(S,4),Pop(S),

Pop(S)。

3.2栈的顺序存储结构

1.顺序栈:利用一组地址连续的存储单元一次存放从栈底到栈顶的数据元素,用指针top指示栈顶元素在顺序栈中的位置。

top指向栈顶元素的下一个位置top指向栈顶元素

初始化:S.top=S.base S.top=S.base-1

判栈空:S.base==S.top S.base==S.top-1

入栈:*s->top++=e(先压后加)*++s->top=e(先加后压)

栈满:S.top-S.base>=S.stacksize S.top-S.base>=S.stacksize-1

出栈:e=*--S.top(先减后弹)e=*S.top--(先弹后减)

能入栈;否则出现空间溢出,引起错误,这种现象称为上溢。

出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。通常栈空时

常作为一种控制转移的条件。

2.用数组的索引值表示栈底和栈顶

top指向栈顶元素的下一个位置top指向栈顶元素初始化:top=0 top=-1

判栈空:top==0 top==-1

入栈:v[top++]=x(先压后加)v[++top]=x(先加后压)

栈满:top-base>=stacksize; top-base>=stacksize-1;

出栈:y=v[--top])(先减后弹)y=v[top--])(先弹后减)

3.

top[0]表示第一个栈的栈顶;top[1]表示第二个栈的栈顶

栈空:top[0]=-1;top[1]=n

入栈:a[++top[0]]=e;a[--top[1]]=e

栈满:top[0]+1=top[1]

出栈:e=a[top[0]--];e=a[top[1]++]

4.关于顺序栈的说明:入栈时,首先判栈是否满了,栈满时,不能入栈;否则出现空间溢出,引起错误,这种现象称为上溢。出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。通常栈空时常作为一种控制转移的条件。

3.3栈的顺序链式存储

入栈:

p=newLNode;//建新的结点

if(!p)exit(1);//存储分配失败

p->data=e;p->next=S->top;//链接到原来的栈顶

S->top=p;//移动栈顶指针

出栈:

if(!S->top)returnNULL;else

{e=S->top->data;//返回栈顶元素

q=S->top;

S->top=S->top->next;//修改栈顶指针

free(q);//释放被删除的结点空间

return e;

}

3.4栈的应用举例

1.数制转换

#defineNUM 10

voidconversion(intN,intr){

int s[NUM],top; /*定义一个顺序栈*/

int x;

top=-1; /*初始化栈*/

while(N){

s[++top]=N%r;/*余数入栈*/

N=N/r; /*商作为被除数继续*/

}

while(top!=-1){

x=s[top--];

printf(“%d”,x);

}

}

2.括号匹配的检验:

3.表达式求值:熟悉前缀、中缀和后缀表达式,表达式求值时栈的状态变化。

4.栈与递归的实现:熟悉使用递归解决

3.5队列的逻辑结构特征

队列:只允许在一端进行插入,而在另一端删除元素。允许插入的一端为队尾(rear),允

许删除的一端为队头(front)。

3.6队列的顺序存储结构

1.循环队列的顺序存储结构:队列存放数组被当作首尾相接的表处理。队头、队尾指针加1时用语言的取模(余数)运算实现。

队列初始化:front=rear=0;

队空条件:front==rear;

队满条件:(rear+1)%MAXQSIZE==front

队头指针进1:front=(front+1)%MAXQSIZE;

队尾指针进1:rear=(rear+1)%MAXQSIZE;

队中元素个数:(rear-front+MAXQSIZE)%MAXQSIZE

2.链式队列:

进队:

p=(QueuePtr)malloc(sizeof(QNode));

if(!p)return0;//存储分配失败

p->data=e; p->next=NULL;

Q->rear->next=p; Q.rear=p;

出队:

if(Q->front==Q->rear) returnNULL;

p=Q->front->next; e=p->data;

Q->front->next=p->next;

if(Q->rear==p) Q->rear=Q->front;

free(p); returne;

第四章串、数组和广义表

4.1串相关术语

串即字符串,是由零个或多个字符组成的有限序列,是数据元素为单个字符的特殊线性表。

串长:串中字符个数(n≥0).n=0时称为空串。

空白串:由一个或多个空格符组成的串。

子串:串s中任意个连续的字符序列叫s的子串;s叫主串。

子串位置:子串的第一个字符的序号。

字符位置:字符在串中的序号

串相等:串长度相等,且对应位置上字符相等。

串的逻辑结构和线性表极为相似,区别仅在于串的数据对象约束为字符集;串的基本操作和线性表有很大差别。在线性表的基本操作中,大多以“单个元素”作为操作对象;在串的基本操作中,通常以“串的整体”作为操作对象。

4.2串的基本操作

熟悉以下操作的意义:

StrAssign(&T,chars)

StrCopy(&T,S)

DestroyString(&S)

StrEmpty(S)

StrCompare(S,T)

StrLength(S)

Concat(&T,S1,S2)

SubString(&Sub,S,pos,len)

Index(S,T,pos)

Replace(&S,T,V)

StrInsert(&S,pos,T)

StrDelete(&S,pos,len)

ClearString(&S)

4.3数组

1.二维数组的顺序存储结构及地址计算方式。

设一般的二维数组是A[c1..d1,c2..d2],这里c1,c2不一定是0。L:单个元素长度

则行优先存储时的地址公式为:

LOC(aij)=LOC(c1,c2)+[(i-c1)*(d2-c2+1)+(j-c2)]*L

二维数组列优先存储的通式为:

LOC(aij)=LOC(ac1,c2)+[(j-c2)*(d1-c1+1)+(i-c1)]*L

2.对称矩阵的压缩存储:在对称矩阵中,只需存储对称矩阵的下半部分。

所需空间数为:n×(n+1)/2。

设一般的二维数组是A[c1..d1,c2..d2],这里c1,c2不一定是0,对应一维存储空间SA的起始

值是C3。

则行优先存储时的地址公式为:

3.三角矩阵:若n阶方阵中下(上)三角(不包括对角线)中的元均为常量c或0,则称为上(下)

三角矩阵;下三角矩阵:主队角线以上均为同一个常数;上三角矩阵,主队角线以下均为同一个常数。与对称矩阵类似,不同之处在于存完下三角中的元素之后,紧接着存储对角线上方的常量,因为是同一个常数,所以存一个即可,这样一共存储了n*(n+1)/2+1个元素,设存入数组:SA[n*(n+1)/2+1]中,这种的存储方式可节约n*(n-1)/2个存储单元。

4.理解下、上三角矩阵:SAk与ai,j的对应关系。

5.稀疏矩阵:将每个非零元素用一个三元组(i,j,aij)来表示,将三元组按行优先的顺序,同一行中列号从小到大的规律排列成一个线性表,称为三元组表,每个稀疏矩阵可用一个三元组表来表示。

4.4广义表

1.广义表是递归定义的线性结构,是线性表的推广,也称为列表(lists)

记为:LS=(1,2,...,n)。

2.广义表与线性表的区别和联系:广义表中元素既可以是原子类型,也可以是列表;当每个元素都为原子且类型相同时,就是线性表。

3.广义表LS=(1,2,…,n)的的性质:

1)广义表中的数据元素有相对次序;

2)广义表的长度定义为最外层包含元素个数;

3)广义表的深度定义为所含括弧的最大重数;

注意:“原子”的深度为0;“空表”的深度为1

4)广义表是一种多层次的数据结构。广义表的元素可以是单元素,也可以是子表,而子表

的元素还可以是子表,…。

5)广义表可以是递归的表。广义表的定义并没有限制元素的递归,即广义表也可以是其自

身的子表。

6)广义表可以为其他表所共享。

7) 任何一个非空广义表LS=( 1, 2,…,n)

均可分解为:表头Head(LS)=1和表尾Tail(LS)=( 2,…,n) 两部分.

任何一个非空表,表头可能是原子,也可能是列表;但表尾一定是列表

4.广义表的基本运算:广义表有两个重要的基本操作,即取头操作(Head)和取尾操作(Tail)。要熟悉这个两个操作,正确给出一个广义表的这两个操作的结果。

第五章树及二叉树

5.1树结构及基本概念

1.树具有下面两个特点:

树的根结点没有前驱结点,除根结点之外的所有结点有且只有一个前驱结点。

树中所有结点可以有零个或多个后继结点。

2.基本术语:

结点(node): 表示树中的元素,包括数据项及若干指向其子树的分支

结点的度(degree):结点拥有的子树数称为~

叶子(leaf):度为0的结点

孩子(child): 结点子树的根称为该结点的孩子

双亲(parents): 孩子结点的上层结点

兄弟(sibling): 同一双亲的孩子

树的度: 一棵树中最大的结点度数

结点的层次(level): 从根结点算起,根为第一层,它的孩子为第二层……

深度(depth): 树中结点的最大层次数

森林(forest): m(m0)棵互不相交的树的集合

5.2二叉树结构

1.定义:二叉树是n(n 0)个结点的有限集,它或为空树(n=0),或由一个根结点和两棵分别

称为左子树和右子树的互不相交的二叉树构成

2.特点:每个结点至多有二棵子树(即不存在度大于2的结点)二叉树的子树有左、右之分,且其次序不能任意颠倒

3.基本形态:五种

4.二叉树的性质

性质1:在二叉树的第i层上至多有2i-1个结点。

性质2:深度为k的二叉树,至多有2k-1个结点。

性质3:对任意二叉树BT,若叶结点数为n0,度为2的结点数为n2,则:n0=n2+1

性质4:具有n个结点的完全二叉树的深度为log2n 1

性质5:如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i(1i n),有:

1)如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是结点i/2

2)如果2i>n,则结点i无左孩子;如果2i n,则其左孩子是结点2i

3)如果2i+1>n,则结点i无右孩子;如果2i+1n,则其右孩子是结点2i+1

5.几种特殊形式的二叉树:

满二叉树:一棵深度为k且有2k1个结点的二叉树称为~

特点:每一层上的结点数都是最大结点数

完全二叉树:深度为k,有n个结点的二叉树当且仅当其每一个结点都与深度为k的满二叉

树中编号从1至n的结点一一对应时,称为~

特点:叶子结点只可能在层次最大的两层上出现;对任一结点,若其右分支下子孙的最大层次为l,则其左分支下子孙的最大层次必为l或l+1

5.3二叉树存储

1.二叉树的顺序存储结构:按满二叉树的结点层次编号,依次存放二叉树中的数据元素

特点:结点间关系蕴含在其存储位置中;浪费空间,适于存满二叉树和完全二叉树

2.二叉树的链式存储结构(二叉链表):在n个结点的二叉链表中,有n+1个空指针域

3.二叉树的链式存储结构(三叉链表)

5.4二叉树遍历

1.二叉树的遍历:

先序遍历(DLR):先访问根结点,然后分别先序遍历左子树、右子树

中序遍历(LDR):先中序遍历左子树,然后访问根结点,最后中序遍历右子树后序遍历(LRD):先后序遍历左、右子树,然后访问根结点

2.遍历的递归算法:

voidpreOrder(bt){/*先序遍历二叉树bt*/

if(bt){/*递归调用的结束条件为bt为空*/

visit(bt->data);/*访问结点的数据域*/

preorder(bt->lchild);/*先序递归遍历bt的左子树*/

preorder(bt->rchild);/*先序递归遍历bt的右子树*/

}

}

voidinOrder(bt){/*中序遍历二叉树bt*/

if(bt){/*递归调用的结束条件为bt为空*/

inOrder(bt->lchild); /*中序递归遍历bt的左子树*/

visit(bt->data); /*访问结点的数据域*/

inOrder(bt->rchild); /*中序递归遍历bt的右子树*/

}

}

void postOrder(bt){/*后序遍历二叉树bt*/

if(bt){/*递归调用的结束条件为bt为空*/

postOrder(bt->lchild);/*后序递归遍历bt的右子树*/

postOrder(bt->rchild);/*后序递归遍历bt的右子树*/

visit(bt->data); /*访问结点的数据域*/

}

}

5.5线索二叉树

1.线索二叉树的定义

前驱与后继:在二叉树的先序、中序或后序遍历序列中两个相邻的结点互称为~

线索:指向前驱或后继结点的指针称为~

线索二叉树:加上线索的二叉链表表示的二叉树叫~

线索化:对二叉树按某种遍历次序使其变为线索二叉树的过程叫~

2.线索二叉树的实现

在有n个结点的二叉链表中必定有n+1个空链域。在线索二叉树的结点中增加两个标志域ltag :若ltag=0,lchild域指向左孩子;若ltag=1,lchild域指向其前驱

rtag :若rtag=0,rchild域指向右孩子;若rtag=1,rchild域指向其后继

3.在中序线索二叉树中找结点后继的方法

rt=1,则rc域直接指向其后继

rt=0,则结点的后继应是其右子树的左链尾(lt=1)的结点

4.在中序线索二叉树中找结点前驱的方法:

lt=1,则lc域直接指向其前驱

lt=0,则结点的前驱应是其左子树的右链尾(rt=1)的结点

5.6树和森林

1.树和森林与二叉树之间的转换方法: 孩子兄弟表示法

5.7赫夫曼树

1.赫夫曼树(Huffman)——带权路径长度最短的树

2.赫夫曼算法

1)根据给定的n个权值构成n棵二叉树的集合F,其中每棵二叉树中只有一个带权值的结点;

2)在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左、右子树上根结点的权值之和;

3)在F中删除这两棵树,同时将新得到的二叉树加入到F中;

4)重复2)和3),直到F中只含一棵树为止

3.Huffman编码:数据通信用的二进制编码

1)思想:根据字符出现频率编码,使电文总长最短

2)编码:根据字符出现频率构造Huffman树,然后将树中结点引向其左孩子的分支标“0”,引向其右孩子的分支标“1”;每个字符的编码即为从根到每个叶子的路径上得到的0、1序

3)译码:从Huffman树根开始,从待译码电文中逐位取码。若编码是“0”,则向左走;若编码是“1”,则向右走,一旦到达叶子结点,则译出一个字符;再重新从根出发,直到电文结束

第六章图

6.1图的术语

图的常用术语及含义:有向图、无向图、完全图、有向完全图、稀疏图、稠密图、网、邻接点、路径、简单路径、回路或环、简单回路、连通、连通图、强连通图、生成树。用n表示

图中顶点数目,用e表示图中边或弧的数目:0≤e≤?*n(n-1)(无向图),0≤e≤n(n-1)

(有向图)

6.2图的邻接矩阵存储表示

1.图的数组(邻接矩阵)存储表示

2.图的邻接矩阵存储方法具有以下特点:

(1)无向图的邻接矩阵一定是一个对称矩阵。因此,在具体存放邻接矩阵时只需存放上(或下)

三角矩阵的元素即可。

(2)对于无向图,邻接矩阵的第i行(或第i列)非零元素的个数正好是第i个顶点的度

TD(vi)。

(3)对于有向图,邻接矩阵的第i行(或第i列)非零元素的个数正好是第i个顶点的出度OD(vi)(或入度ID(vi))。

3.图的邻接矩阵存储方法的优点:用邻接矩阵方法存储图,很容易确定图中任意两个顶点之间

是否有边相连

4.图的邻接矩阵存储方法的局限性:要确定图中有多少条边,则必须按行、按列对每个元素进行检测,所花费的时间代价很大。存储空间为O(n2),适用于稠密图。图的邻接表存储表示6.3图的邻接表存储表示

1.邻接表(AdjacencyList)是图的一种顺序存储与链式存储结合的存储方法。

对于图G中的每个顶点vi,将所有邻接于vi的顶点vj链成一个单链表,这个单链表就称为顶点vi的邻接表,再将所有顶点的邻接表表头放到数组中,就构成了图的邻接表。

2.邻接表表示中包括两种结点结构:

3.邻接表表示法的优点:在邻接表上容易找到任一顶点的第一个邻接点和下一个邻接点

4.邻接表表示法的局限性:要判定任意两个顶点(vi和vj)之间是否有边或弧相连,则需搜索第i个或第j个链表,因此,不及邻接矩阵方便

6.4图的遍历

1.图的深度优先遍历(depth-firstsearch,DFS):假设初始状态是图中所有顶点未曾被访问,则深度优先搜索可从图中某个顶点v出发,访问此顶点;然后依次从v的未被访问的邻接点出发深度优先遍历图;直至图中所有和v有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。

2.图的广度优先遍历(breadth-firstsearch,BFS):假设从图中某顶点v出发,在访问了v

之后依次访问v的各个未曾访问过的邻接点;然后分别从这些邻接点出发依次访问它们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问;直至图中所有已被访问的顶点的邻接点都被访问到。若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。

6.5最小生成树

1.生成树

1)一个连通图的生成树是由n-1条边且包含G的所有顶点的树组成。

2)可按深度或广度优先遍历来创建生成树。

3)由深度优先遍历得到的为深度优先生成树;

4)由广度优先遍历得到的为广度优先生成树。

5)对于非连通图,通过这样的遍历,将得到的是生成森林。

2.最小生成树:如果无向连通图是一个网,那么,它的所有生成树中必有一棵边的权值总和最小的生成树,我们称这棵生成树为最小生成树,简称为最小生成树

3.普里姆算法的基本思想:取图中任意一个顶点v作为生成树的根,之后往生成树上添加新的顶点w。在添加的顶点w和已经在生成树上的顶点v之间必定存在一条边,并且该边的权值在所有连通顶点v和w之间的边中取值最小。之后继续往生成树上添加顶点,直至生成树上含有n-1个顶点为止。

4.克鲁斯卡尔算法:先构造一个只含n个顶点的子图SG,然后从权值最小的边开始,若它的添加不使SG中产生回路,则在SG上加上这条边,如此重复,直至加上n-1条边为止。

5.普里姆算法:时间复杂度:O(n2),适应范围:稠密图克鲁斯卡尔算法:时间复杂度:

O(eloge),适应范围:稀疏图

6.6拓扑排序

1.拓扑排序:

按照有向图给出的次序关系,将图中顶点排成一个线性序列,对于有向图中没有限定次序关系的顶点,则可以人为加上任意的次序关系。由此所得顶点的线性序列称之为拓扑有序序

2.检查有向图中是否存在回路的方法之一,是对有向图进行拓扑排序。

3.AOV网:用顶点表示活动,边表示活动间的先后关系的有向图称为顶点活动网,简称AOV网

4.拓扑排序算法

1)从有向图中选取一个没有前驱的顶点,并输出之;

2)从有向图中删去此顶点以及所有以它为尾的弧;

重复上述两步,直至图空,或者图不空但找不到无前驱的顶点为止。

6.7关键路径

1.若在带权的有向图中,以:顶点表示事件;有向边表示活动;边上的权值表示活动的开销(如该活动持续的时间)。则此带权的有向图称为AOE(activityonedge)网。

2.由于AOE网中的某些活动能够同时进行,故完成整个工程所必须花费的时间应该为:源点到终点的最大路径长度(这里的路径长度是指该路径上的各个活动所需时间之和)。

1)具有最大路径长度的路径称为关键路径。

2)关键路径上的活动称为关键活动。

3)关键路径长度是整个工程所需的最短工期。这就是说,要缩短整个工期,必须加快关键活动的进度。

4)利用AOE网进行工程管理时要需解决的主要问题是:确定关键路径,以找出哪些活动是影响工程进度的关键活动。

3.AOE网具有以下两个性质:

①只有在某顶点所代表的事件发生后,从该顶点出发的各有向边所代表的活动才能开始。

②只有在进入一某顶点的各有向边所代表的活动都已经结束,该顶点所代表的事件才能发生。

4.求关键路径的算法讨论

ve(0)=0,ve(k)=maxj{ve(j)+dut()}--拓扑有序

vl(n-1)=ve(n-1),vl(j)=mink{vl(k)-dut()}–逆拓扑有序

e(i)=ve(j)

l(i)=vl(k)-dut()

第七章查找

7.1顺序查找

1.顺序查找又称线性查找,是最基本的查找方法之一。

2.查找表结构:以顺序表或线性链表表示

3.基本思想:从一端开始向另一端,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功;反之,若直至另一端,其关键字和给定值比较都不等,则表明表中没有所查记录,查找不成功。

4.哨兵的作用:免去查找过程中每一步都要检测整个表是否查找完毕。

5.平均查找长度(ASL):

查找成功时:(n+1)/2

查找不成功时:n+1

平均查找长度:3(n+1)/4

6.顺序查找缺点:当n很大时,平均查找长度较大,效率低

顺序查找优点:对表中数据元素的存储没有要求。另外,对于线性链表,只能进行顺序查找。

7.2折半查找(二分查找)

1.查找表结构:以顺序表且有序表表示

2.基本思想:查找区间逐步缩小(折半)

3.能够画出其判定树:

4.平均查找长度: ASL bs约等于log2(n+1)-1

数据结构(c语言版)复习资料

数据结构复习资料 一、填空题 1. 数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和运算等的学科。 2. 数据结构被形式地定义为(D, R),其中D是数据元素的有限集合,R是D上的关系有限集合。 3. 数据结构包括数据的逻辑结构、数据的存储结构和数据的运算这三个方面的内容。 4. 数据结构按逻辑结构可分为两大类,它们分别是线性结构和非线性结构。 5. 线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。 6.在线性结构中,第一个结点没有前驱结点,其余每个结点有且只有1个前驱结点;最后一个结点没有后续结点,其余每个结点有且只有1个后续结点。 7. 在树形结构中,树根结点没有前驱结点,其余每个结点有且只有1个前驱结点;叶子结点没有后续结点,其余每个结点的后续结点数可以任意多个。 8. 在图形结构中,每个结点的前驱结点数和后续结点数可以任意多个。 9.数据的存储结构可用四种基本的存储方法表示,它们分别是顺序、链式、索引和散列。 10. 数据的运算最常用的有5种,它们分别是插入、删除、修改、查找、排序。 11. 一个算法的效率可分为时间效率和空间效率。 12. 在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与表长和该元素在表中的位置有关。 13. 线性表中结点的集合是有限的,结点间的关系是一对一的。 14. 向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动n-i+1 个元素。 15. 向一个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动n-i 个元素。 16. 在顺序表中访问任意一结点的时间复杂度均为O(1),因此,顺序表也称为随机存取的数据结构。 17. 顺序表中逻辑上相邻的元素的物理位置必定相邻。单链表中逻辑上相邻的元素的物理位置不一定相邻。 18.在单链表中,除了首元结点外,任一结点的存储位置由其直接前驱结点的链域的值指示。 19.在n个结点的单链表中要删除已知结点*p,需找到它的前驱结点的地址,其时间复杂度为O(n)。 20. 向量、栈和队列都是线性结构,可以在向量的任何位置插入和删除元素;对于栈只能在栈顶插入和删除元素;对于队列只能在队尾插入和队首删除元素。

数据结构C语言版期末考试试题(有答案)

“数据结构”期末考试试题 一、单选题(每小题2分,共12分) 1.在一个单链表HL中,若要向表头插入一个由指针p指向的结点,则执行( )。 A. HL=ps p一>next=HL B. p一>next=HL;HL=p3 C. p一>next=Hl;p=HL; D. p一>next=HL一>next;HL一>next=p; 2.n个顶点的强连通图中至少含有( )。 A.n—l条有向边 B.n条有向边 C.n(n—1)/2条有向边 D.n(n一1)条有向边 3.从一棵二叉搜索树中查找一个元素时,其时间复杂度大致为( )。 A.O(1) B.O(n) C.O(1Ogzn) D.O(n2) 4.由权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为( )。 A.24 B.48 C. 72 D. 53 5.当一个作为实际传递的对象占用的存储空间较大并可能需要修改时,应最好把它说明为( )参数,以节省参数值的传输时间和存储参数的空间。 A.整形 B.引用型 C.指针型 D.常值引用型· 6.向一个长度为n的顺序表中插人一个新元素的平均时间复杂度为( )。 A.O(n) B.O(1) C.O(n2) D.O(10g2n) 二、填空题(每空1分,共28分) 1.数据的存储结构被分为——、——、——和——四种。 2.在广义表的存储结构中,单元素结点与表元素结点有一个域对应不同,各自分别为——域和——域。 3.——中缀表达式 3十x*(2.4/5—6)所对应的后缀表达式为————。 4.在一棵高度为h的3叉树中,最多含有——结点。 5.假定一棵二叉树的结点数为18,则它的最小深度为——,最大深度为——· 6.在一棵二叉搜索树中,每个分支结点的左子树上所有结点的值一定——该结点的值,右子树上所有结点的值一定——该结点的值。 7.当向一个小根堆插入一个具有最小值的元素时,该元素需要逐层——调整,直到被调整到——位置为止。 8.表示图的三种存储结构为——、——和———。 9.对用邻接矩阵表示的具有n个顶点和e条边的图进行任一种遍历时,其时间复杂度为——,对用邻接表表示的图进行任一种遍历时,其时间复杂度为——。 10.从有序表(12,18,30,43,56,78,82,95)中依次二分查找43和56元素时,其查找长度分别为——和——· 11.假定对长度n=144的线性表进行索引顺序查找,并假定每个子表的长度均

数据结构试题及答案10套

一、单选题(每题 2 分,共20分) 1. 1.对一个算法的评价,不包括如下(B )方面的内容。 A.健壮性和可读性B.并行性C。正确性D.时空复杂度 2.2.在带有头结点的单链表HL中,要向表头插入一个由指针p指向 的结点,则执行(A ). A. p-〉next=HL->next; HL-〉next=p; B. p-〉next=HL;HL=p; C。p->next=HL; p=HL;D. HL=p; p-〉next=HL; 3.3.对线性表,在下列哪种情况下应当采用链表表示?( B ) A.经常需要随机地存取元素 B。经常需要进行插入和删除操作 C。表中元素需要占据一片连续的存储空间D.表中元素的个数不变 4. 4.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序 列的是( C ) A. 2 3 1 ??? B. 3 2 1 C。 3 1 2 ??? D. 1 23 5. 5.AOV网是一种(D )。 A.有向图B.无向图C.无向无环图D.有向无环图 6.6。采用开放定址法处理散列表的冲突时,其平均查找长度(B)。 A.低于链接法处理冲突B.高于链接法处理冲突C.与链接法处理冲突相同 D。高于二分查找 7.7。若需要利用形参直接访问实参时,应将形参变量说明为(D ) 参数. A。值B。函数 C.指针 D。引用 8.8.在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结 点都具有相同的( A )。 A。行号 B.列号 C.元素值 D.非零元素个数 9.9.快速排序在最坏情况下的时间复杂度为( D )。 A。O(log 2n) B.O(nlog 2 n) C。0(n) D.0 (n2) 10.10.从二叉搜索树中查找一个元素时,其时间复杂度大致为( C ). A.O(n) B. O(1) C。 O(log 2 n) D. O(n2)二、运算题(每题 6 分,共24分)

数据结构(c语言版)期末考试复习试题

《数据结构与算法》(c语言版)期末考复习题 一、选择题。 1.在数据结构中,从逻辑上可以把数据结构分为 C 。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 2.数据结构在计算机内存中的表示是指 A 。 A.数据的存储结构B.数据结构C.数据的逻辑结构D.数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的 A 结构。 A.逻辑B.存储C.逻辑和存储D.物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储 C 。A.数据的处理方法B.数据元素的类型 C.数据元素之间的关系D.数据的存储方法 5.在决定选取何种存储结构时,一般不考虑 A 。 A.各结点的值如何B.结点个数的多少 C.对数据有哪些运算D.所用的编程语言实现这种结构是否方便。 6.以下说法正确的是 D 。 A.数据项是数据的基本单位

B.数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。(1)A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进C.分析算法的易读性和文档性(2)A.空间复杂度和时间复杂度B.正确性和简明性 C.可读性和文档性D.数据复杂性和程序复杂性 8.下面程序段的时间复杂度是O(n2) 。 s =0; for( I =0; i

数据结构试题答案

第一章概论 一、选择题 1、研究数据结构就是研究(D )。 A. 数据的逻辑结构 B. 数据的存储结构 C. 数据的逻辑结构和存储结构 D. 数据的逻辑结构、存储结构及其基本操作(研究非数值计算的程序设计问题中,计算机操作对象以及他们之间的关系和操作) 2、算法分析的两个主要方面是( A )。 A. 空间复杂度和时间复杂度 B. 正确性和简单性 C. 可读性和文档性 D. 数据复杂性和程序复杂性 3、具有线性结构的数据结构是( D )。(线性结构就是:在非空有限集合中,存在为一个被称为第一个的数据元素和最后一个元素,有除了第一个元素,集合中每一个元素均只有一个前驱,除了最后一个元素有唯一后继)(链表、栈、队列、数组、串) A. 图 B. 树 C. 广义表(线性表的推广) D. 栈 4、计算机中的算法指的是解决某一个问题的有限运算序列,它必须具备输入、输出、(B )等5个特性。 A. 可执行性、可移植性和可扩充性 B. 可执行性、有穷性和确定性 C. 确定性、有穷性和稳定性 D. 易读性、稳定性和确定性 5、下面程序段的时间复杂度是( C )。 for(i=0;i

6、算法是(D )。为了解决某一问题而规定的一个有限长的操作序列 A. 计算机程序 B. 解决问题的计算方法 C. 排序算法 D. 解决问题的有限运算序列 7、某算法的语句执行频度为(3n+nlog2n+n2+8),其时间复杂度表示(C )。 A. O(n) B. O(nlog2n) C. O(n2) D. O(log2n) 8、下面程序段的时间复杂度为( C )。 i=1; while(i<=n) i=i*3; A. O(n) B. O(3n) C. O(log3n) D. O(n3) 9、数据结构是一门研究非数值计算的程序设计问题中计算机的数据元素以及它们之间的(B )和运算等的学科。(关系和操作) A. 结构 B. 关系 C. 运算 D. 算法 10、下面程序段的时间复杂度是( A )。 i=s=0; while(s

数据结构(C语言版)期末复习

数据结构(C语言版)期末复习汇总 第一章绪论 数据结构:是一门研究非数值计算程序设计中的操作对象,以及这些对象之间的关系和操作的学科。 数据结构分为:逻辑结构、物理结构、操作三部分 逻辑结构:集合、线性结构、树形结构、图(网)状结构 物理结构(存储结构):顺序存储结构、链式存储结构 算法:是为了解决某类问题而规定的一个有限长的操作序列。 算法五个特性:有穷性、确定性、可行性、输入、输出 评价算法优劣的基本标准(4个):正确性、可读性、健壮性、高效性及低存储量 语句频度的计算。 算法的时间复杂度: 常见有:O(1),O(n),O(n2),O(log2n),O(nlog2n),O(2n) 第二章线性表 线性表的定义和特点: 线性表:由n(n≥0)个数据特性相同的元素构成的有限序列。线性表中元素个数n(n≥0)定义为线性表的长度,n=0时称为空表。 非空线性表或线性结构,其特点: (1)存在唯一的一个被称作“第一个”的数据元素; (2)存在唯一的一个被称作“最有一个”的数据元素; (3)除第一个之外,结构中的每个数据元素均只有一个前驱; (4)除最后一个之外,结构中的每个数据元素均只有一个后继。 顺序表的插入:共计n个元素,在第i位插入,应移动(n-i+1)位元素。 顺序表的删除:共计n个元素,删除第i位,应移动(n-i)位元素。 线性表的两种存储方式:顺序存储、链式存储。 顺序存储 概念:以一组连续的存储空间存放线性表; 优点:逻辑相邻,物理相邻;可随机存取任一元素;存储空间使用紧凑; 缺点:插入、删除操作需要移动大量的元素;预先分配空间需按最大空间分配,利用不充分;表容量难以扩充; 操作:查找、插入、删除等 查找: ListSearch(SqlList L,ElemType x,int n) { int i; for (i=0;i

数据结构c语言版期末考试复习试题

《数据结构与算法》复习题 一、选择题。 1在数据结构中,从逻辑上可以把数据结构分为 C 。 A ?动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 2?数据结构在计算机内存中的表示是指_A_。 A .数据的存储结构B.数据结构 C .数据的逻辑结构 D .数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的A结构。 A .逻辑 B .存储C.逻辑和存储 D .物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储_C A .数据的处理方法 B .数据元素的类型 C.数据元素之间的关系 D .数据的存储方法 5.在决定选取何种存储结构时,一般不考虑A A .各结点的值如何C.对数据有哪些运算 B .结点个数的多少 D .所用的编程语言实现这种结构是否方 6.以下说法正确的是D A .数据项是数据的基本单位 B .数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D .一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。 (1) A .找出数据结构的合理性B.研究算法中的输入和输出的关系 C .分析算法的效率以求改进C.分析算法的易读性和文档性 (2) A .空间复杂度和时间复杂度B.正确性和简明性 &下面程序段的时间复杂度是0( n2) s =0; for( I =0; i

数据结构习题与答案

第 1 章绪论 课后习题讲解 1. 填空 ⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 【解答】数据元素 ⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。 【解答】数据项,数据元素 【分析】数据结构指的是数据元素以及数据元素之间的关系。 ⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。 【解答】集合,线性结构,树结构,图结构 ⑷数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。 【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系 ⑸算法具有五个特性,分别是()、()、()、()、()。 【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性 ⑹算法的描述方法通常有()、()、()和()四种,其中,()被称为算法语言。 【解答】自然语言,程序设计语言,流程图,伪代码,伪代码 ⑺在一般情况下,一个算法的时间复杂度是()的函数。 【解答】问题规模 ⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。 【解答】Ο(1),Ο(nlog2n) 【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。 2. 选择题 ⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。 A 线性结构 B 非线性结构 C 存储位置 D 指针 【解答】C,D 【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。

数据结构试题及答案

一、单选题(每题2 分,共20分) 1. 1.对一个算法的评价,不包括如下(B )方面的内容。 A.健壮性和可读性B.并行性C.正确性D.时空复杂度 2. 2.在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结 点,则执行( A )。 A. p->next=HL->next; HL->next=p; B. p->next=HL; HL=p; C. p->next=HL; p=HL; D. HL=p; p->next=HL; 3. 3.对线性表,在下列哪种情况下应当采用链表表示?(B ) A.经常需要随机地存取元素 B.经常需要进行插入和删除操作 C.表中元素需要占据一片连续的存储空间 D.表中元素的个数不变 4. 4.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是 ( C ) A. 2 3 1 B. 3 2 1 C. 3 1 2 D. 1 2 3 5. 5.AOV网是一种( D )。 A.有向图B.无向图C.无向无环图D.有向无环图 6. 6.采用开放定址法处理散列表的冲突时,其平均查找长度(B)。 A.低于链接法处理冲突 B. 高于链接法处理冲突 C.与链接法处理冲突相同D.高于二分查找 7.7.若需要利用形参直接访问实参时,应将形参变量说明为(D )参数。 A.值B.函数C.指针D.引用 8.8.在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具 有相同的(A)。 A.行号B.列号C.元素值D.非零元素个数 9.9.快速排序在最坏情况下的时间复杂度为(D )。 A.O(log2n) B.O(nlog2n) C.0(n) D.0(n2) 10.10.从二叉搜索树中查找一个元素时,其时间复杂度大致为( C )。 A. O(n) B. O(1) C. O(log2n) D. O(n2) 二、二、运算题(每题 6 分,共24分) 1. 1.数据结构是指数据及其相互之间的______________。当结点之间存在M 对N(M:N)的联系时,称这种结构为_____________________。 2. 2.队列的插入操作是在队列的___尾______进行,删除操作是在队列的 ____首______进行。 3. 3.当用长度为N的数组顺序存储一个栈时,假定用top==N表示栈空,则 表示栈满的条件是___top==0___(要超出才为满)_______________。 4. 4.对于一个长度为n的单链存储的线性表,在表头插入元素的时间复杂度 为____O(1)_____,在表尾插入元素的时间复杂度为____O n________。

数据结构试题库答案

数据结构试题及答案 一、单项选择题 (1)一个算法应该就是()。 A)程序???B)问题求解步骤得描述 C)要满足五个基本属性??D) A与C (2)算法指得就是()。 A)计算机程序???B)解决问题得计算方法 C)排序算法???D)解决问题得有限运算序列。 (3)与数据元素本身得形式、内容、相对位置、个数无关得就是数据得()。 A) 存储结构B) 逻辑结构C)算法D)操作 (4)从逻辑上可以把数据结构分为( )两大类。 A)动态结构、静态结构??B) 顺序结构、链式结构 C)线性结构、非线性结构???D)初等结构、构造型结构 (5)下列叙述中正确得就是()。 A)一个逻辑数据结构只能有一种存储结构 B)数据得逻辑结构属于线性结构,存储结构属于非线性结构 C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理得效率 D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理得效率 (6)数据得基本单位就是() ?A) 数据项??B) 数据类型C)数据元素??D)数据变量 (7)下列程序得时间复杂度为() i=0;s=0; while(s

数据结构C语言版第一二章习题答案

数据结构C语言版第一 二章习题答案 Document number:BGCG-0857-BTDO-0089-2022

第1章绪论 习题 1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。 2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。 3.简述逻辑结构的四种基本关系并画出它们的关系图。 4.存储结构由哪两种基本的存储方法实现? 5.选择题 (1)在数据结构中,从逻辑上可以把数据结构分成()。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构(2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的()。 A.存储结构 B.存储实现 C.逻辑结构 D.运算实现 (3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。 A.数据具有同一特点

B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致 C.每个数据元素都一样 D.数据元素所包含的数据项的个数要相等 (4)以下说法正确的是()。 A.数据元素是数据的最小单位 B.数据项是数据的基本单位 C.数据结构是带有结构的各数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构(5)以下与数据的存储结构无关的术语是()。 A.顺序队列 B. 链表 C.有序表 D. 链栈 (6)以下数据结构中,()是非线性数据结构 A.树 B.字符串 C.队 D.栈6.试分析下面各程序段的时间复杂度。 (1)x=90; y=100;? while(y>0) if(x>100) {x=x-10;y--;} else x++; (2)for (i=0; i

数据结构试题与答案.doc

数据结构试卷(十一) 一、选择题 (30 分) 1 .设某无向图有n 个顶点,则该无向图的邻接表中有()个表头结点。 (A) 2n (B) n (C) n/2 (D) n(n-1) 2 .设无向图 G 中有 n 个顶点,则该无向图的最小生成树上有()条边。 (A) n (B) n-1 (C) 2n (D) 2n-1 3 .设一组初始记录关键字序列为(60 , 80 , 55 , 40 , 42 , 85) ,则以第一个关键字45 为 基准而得到的一趟快速排序结果是()。 (A) 40 ,42 ,60 , 55 ,80 ,85 (B) 42 ,45 ,55 , 60 ,85 ,80 (C) 42 , 40 ,55 , 60 ,80 ,85 (D) 42 , 40 ,60 , 85 ,55 ,80 4 .()二叉排序树可以得到一个从小到大的有序序列。 (A) 先序遍历(B) 中序遍历(C) 后序遍历(D) 层次遍历 5 .设按照从上到下、从左到右的顺序从 1 开始对完全二叉树进行顺序编号,则编号为i 结 点的左孩子结点的编号为()。 (A) 2i+1 (B) 2i (C) i/2 (D) 2i-1 6 .程序段 s=i=0 ; do {i=i+1 ; s=s+i ; }while(i<=n) ;的时间复杂度为()。 (A) O(n) (B) O(nlog 2 n) (C) O(n 2 ) (D) O(n 3 /2) 7 .设带有头结点的单向循环链表的头指针变量为head ,则其判空条件是()。 (A) head==0 (B) head->next==0 (C) head->next==head (D) head!=0 8 .设某棵二叉树的高度为10 ,则该二叉树上叶子结点最多有()。 (A) 20 (B) 256 (C) 512 (D) 1024 9 .设一组初始记录关键字序列为(13 ,18 ,24 ,35 ,47 ,50 ,62 ,83 ,90 ,115 ,134), 则利用二分法查找关键字90 需要比较的关键字个数为()。 (A) 1 (B) 2 (C) 3 (D) 4 10. 设指针变量 top 指向当前链式栈的栈顶,则删除栈顶元素的操作序列为()。 (A) top=top+1; (B) top=top-1; (C) top->next=top; (D) top=top->next; 二、判断题 (20 分) 1 .不论是入队列操作还是入栈操作,在顺序存储结构上都需要考虑“溢出”情况。() 2 .当向二叉排序树中插入一个结点,则该结点一定成为叶子结点。() 3 .设某堆中有 n 个结点,则在该堆中插入一个新结点的时间复杂度为O(log 2 n) 。() 4 .完全二叉树中的叶子结点只可能在最后两层中出现。() 5 .哈夫曼树中没有度数为 1 的结点。() 6 .对连通图进行深度优先遍历可以访问到该图中的所有顶点。() 7 .先序遍历一棵二叉排序树得到的结点序列不一定是有序的序列。() 8 .由树转化成二叉树,该二叉树的右子树不一定为空。() 9 .线性表中的所有元素都有一个前驱元素和后继元素。() 10. 带权无向图的最小生成树是唯一的。()

《数据结构》c语言版

《数据结构》 第五版 清华大学自动化系 李宛洲 2004年5月

目录 第一章数据结构--概念与基本类型 (6) 1.1概述 (6) 1.1.1数据结构应用对象 (6) 1.1.2学习数据结构的基础 (7) 1.1.2.1 C语言中的结构体 (7) 1.1.2.2 C语言的指针在数据结构中的关联作用 (8) 1.1.2.3 C语言的共用体(union)数据类型 (12) 1.1.3数据结构定义 (15) 1.2线性表 (17) 1.2.1 顺序表 (18) 1.2.2 链表 (20) 1.2.2.1链表的基本结构及概念 (20) 1.2.2.2单链表设计 (22) 1.2.2.3单链表操作效率 (29) 1.2.2.4双链表设计 (30) 1.2.2.5链表深入学习 (32) 1.2.2.6稀疏矩阵的三元组与十字链表 (36) 1.2.3 堆栈 (41) 1.2.3.1堆栈结构 (41) 1.2.3.2基本操作 (42) 1.2.3.3堆栈与递归 (44) 1.2.3.4递归与分治算法 (45) 1.2.3.5递归与递推 (49) 1.2.3.6栈应用 (52) 1.2.4 队列 (57) 1.2.4.1队列结构 (57) 1.2.3.2队列应用 (59) 1.3非线性数据结构--树 (64) 1.3.1 概念与术语 (64) 1.3.1.1引入非线性数据结构的目的 (64) 1.3.1.2树的定义与术语 (65) 1.3.1.3树的内部节点与叶子节点存储结构问题 (66) 1.3.2 二叉树 (66) 1.3.2.1二叉树基本概念 (66) 1.3.2.2完全二叉树的顺序存储结构 (68) 1.3.2.3二叉树遍历 (69) 1.3.2.4二叉树唯一性问题 (71)

数据结构试题及答案(免费)

数据结构试卷(十一) 一、选择题(30分) 1.设某无向图有n个顶点,则该无向图的邻接表中有()个表头结点。 (A) 2n (B) n (C) n/2 (D) n(n-1) 2.设无向图G中有n个顶点,则该无向图的最小生成树上有()条边。 (A) n (B) n-1 (C) 2n (D) 2n-1 3.设一组初始记录关键字序列为(60,80,55,40,42,85),则以第一个关键字45为基准而得到的一趟快速排序结果是()。 (A) 40,42,60,55,80,85 (B) 42,45,55,60,85,80 (C) 42,40,55,60,80,85 (D) 42,40,60,85,55,80 4.()二叉排序树可以得到一个从小到大的有序序列。 (A) 先序遍历(B) 中序遍历(C) 后序遍历(D) 层次遍历 5.设按照从上到下、从左到右的顺序从1开始对完全二叉树进行顺序编号,则编号为i结点的左孩子结点的编号为()。 (A) 2i+1 (B) 2i (C) i/2 (D) 2i-1 6.程序段s=i=0;do {i=i+1;s=s+i;}while(i<=n);的时间复杂度为()。 (A) O(n) (B) O(nlog2n) (C) O(n2) (D) O(n3/2) 7.设带有头结点的单向循环链表的头指针变量为head,则其判空条件是()。 (A) head==0 (B) head->next==0 (C) head->next==head (D) head!=0 8.设某棵二叉树的高度为10,则该二叉树上叶子结点最多有()。 (A) 20 (B) 256 (C) 512 (D) 1024 9.设一组初始记录关键字序列为(13,18,24,35,47,50,62,83,90,115,134),则利用二分法查找关键字90需要比较的关键字个数为()。 (A) 1 (B) 2 (C) 3 (D) 4 10.设指针变量top指向当前链式栈的栈顶,则删除栈顶元素的操作序列为()。 (A) top=top+1; (B) top=top-1; (C) top->next=top; (D) top=top->next; 二、判断题(20分) 1.不论是入队列操作还是入栈操作,在顺序存储结构上都需要考虑“溢出”情况。()2.当向二叉排序树中插入一个结点,则该结点一定成为叶子结点。() 3.设某堆中有n个结点,则在该堆中插入一个新结点的时间复杂度为O(log2n)。()4.完全二叉树中的叶子结点只可能在最后两层中出现。() 5.哈夫曼树中没有度数为1的结点。() 6.对连通图进行深度优先遍历可以访问到该图中的所有顶点。() 7.先序遍历一棵二叉排序树得到的结点序列不一定是有序的序列。() 8.由树转化成二叉树,该二叉树的右子树不一定为空。() 9.线性表中的所有元素都有一个前驱元素和后继元素。() 10.带权无向图的最小生成树是唯一的。() 三、填空题(30分) 1. 1.设指针变量p指向双向链表中的结点A,指针变量s指向被插入的结点X,则在结点 A的后面插入结点X的操作序列为_________=p;s->right=p->right;__________=s; p->right->left=s;(设结点中的两个指针域分别为left和right)。 2. 2.设完全有向图中有n个顶点,则该完全有向图中共有________条有向条;设完全无 向图中有n个顶点,则该完全无向图中共有________条无向边。

数据结构C语言版(第2版)严蔚敏人民邮电出版社课后习题答案

数据结构(C语言版)(第2版) 课后习题答案 李冬梅 2015.3

目录 第1章绪论 (1) 第2章线性表 (5) 第3章栈和队列 (13) 第4章串、数组和广义表 (26) 第5章树和二叉树 (33) 第6章图 (43) 第7章查找 (54) 第8章排序 (65)

第1章绪论 1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。 答案: 数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。 数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。在有些情况下,数据元素也称为元素、结点、记录等。数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。 数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。例如,学生基本信息表中的学号、姓名、性别等都是数据项。 数据对象:是性质相同的数据元素的集合,是数据的一个子集。例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。 逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。 存储结构:数据对象在计算机中的存储表示,也称为物理结构。 抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。 2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。 答案: 例如有一张学生基本信息表,包括学生的学号、姓名、性别、籍贯、专业等。每个学生基本信息记录对应一个数据元素,学生记录按顺序号排列,形成了学生基本信息记录的线性序列。对于整个表来说,只有一个开始结点(它的前面无记录)和一个终端结点(它的后面无记录),其他的结点则各有一个也只有一个直接前趋和直接后继。学生记录之间的这种关系就确定了学生表的逻辑结构,即线性结构。 这些学生记录在计算机中的存储表示就是存储结构。如果用连续的存储单元(如用数组表示)来存放这些记录,则称为顺序存储结构;如果存储单元不连续,而是随机存放各个记录,然后用指针进行链接,则称为链式存储结构。 即相同的逻辑结构,可以对应不同的存储结构。 3.简述逻辑结构的四种基本关系并画出它们的关系图。

数据结构习题及答案

第一章 1.在数据结构中,从逻辑上可以把数据结构分为(C ) A.动态结构和静态结构 B. 紧凑结构和非紧凑结构 C.线性结构和非线性结构 D. 内部结构和外部结构 ● 2.在数据结构中,与所使用的计算机无关的是( A ) A. 逻辑结构 B. 存储结构 C. 逻辑和存储结构 D. 物理结构 3.下面程序的时间复杂度为____O(mn)_______。 for (int i=1; i<=m; i++) for (int j=1; j<=n; j++ ) S+=i 第二章线性表 ●链表不具备的特点是(A) A 可以随机访问任一结点(顺序) B 插入删除不需要移动元素 C 不必事先估计空间 D 所需空间与其长度成正比 2. 不带头结点的单链表head为空的判定条件为(A ),带头结点的单链表head为空的判定条件为(B ) A head==null B head->next==null C head->next==head D head!=null ●3.在线性表的下列存储结构中,读取元素花费时间最少的是(D) A 单链表 B 双链表 C 循环链表 D 顺序表 ● 4.对于只在表的首、尾两端进行手稿操作的线性表,宜采用的存储结构为(C) A 顺序表 B 用头指针表示的单循环链表 C 用尾指针表示的单循环链表 D 单链表 ● 5.在一个具有n 个结点的有序单链表中插入一个新的结点,并保持链表元素仍然有序, 则操作的时间复杂度为( D ) A O(1) B O(log2n) C O(n2) D O(n) ● 6.在一个长度为n (n>1)的单链表上,设有头和尾两个指针,执行(B)操作与链表的长 度有关 A 删除单链表中第一个元素 B 删除单链表中最后一个元素 C 在第一个元素之前插入一个新元素 D 在最后一个元素之后插入一个新元素 ●7.与单链表相比,双向链表的优点之一是(D) A 插入删除操作更简单 B 可以进行随机访问 C 可以省略表头指针或表尾指针 D 顺序访问相邻结点更容易 ●8.若list是某带头结点的循环链表的头结点指针,则该链表最后那个链结点的指针域 (头结点的地址)中存放的是( B ) A list的地址 B list的内容 C list指的链结点的值 D 链表第一个链结点的地址 ●9.若list1和list2分别为一个单链表与一个双向链表的第一个结点的指针,则( B ) A list2比list1占用更多的存储单元 B list1与list2占用相同的存储单元 C list1和list2应该是相同类型的指针变量 D 双向链表比单链表占用更多的存储单元 10.链表中的每个链结点占用的存储空间不必连续,这句话正确吗? (不正确) 11. 某线性表采用顺序存储结构,元素长度为4,首地址为100,则下标为12的(第13个)元素的存储地址为148。V 100+4*12=148 11.在顺序表的(最后一个结点之后)插入一个新的数据元素不必移动任何元素。 12.若对线性表进行的操作主要不是插入删除,则该线性表宜采用(顺序)存储结构,若频繁地对线性表进行插入和删除操作,则该线性表宜采用( 链 )存储结构。

数据结构(c语言版)课后习题答案完整版

第1章绪论 5.选择题:CCBDCA 6.试分析下面各程序段的时间复杂度。 (1)O(1) (2)O(m*n) (3)O(n2) (4)O(log3n) (5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O(n2) (6)O(n) 第2章线性表 1.选择题 babadbcabdcddac 2.算法设计题 (6)设计一个算法,通过一趟遍历在单链表中确定值最大的结点。 ElemType Max (LinkList L ){ if(L->next==NULL) return NULL; pmax=L->next; //假定第一个结点中数据具有最大值 p=L->next->next; while(p != NULL ){//如果下一个结点存在 if(p->data > pmax->data) pmax=p; p=p->next; } return pmax->data; (7)设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表的存储空间。 void inverse(LinkList &L) { // 逆置带头结点的单链表 L p=L->next; L->next=NULL; while ( p) { q=p->next; // q指向*p的后继 p->next=L->next; L->next=p; // *p插入在头结点之后 p = q; }

} (10)已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为item的数据元素。 [题目分析] 在顺序存储的线性表上删除元素,通常要涉及到一系列元素的移动(删第i个元素,第i+1至第n个元素要依次前移)。本题要求删除线性表中所有值为item的数据元素,并未要求元素间的相对位置不变。因此可以考虑设头尾两个指针(i=1,j=n),从两端向中间移动,凡遇到值item的数据元素时,直接将右端元素左移至值为item的数据元素位置。 void Delete(ElemType A[ ],int n) ∥A是有n个元素的一维数组,本算法删除A中所有值为item的元素。 {i=1;j=n;∥设置数组低、高端指针(下标)。 while(i

数据结构试题(含答案)

一.是非题 (正确的打“√”,错误的打“×”。) 1. 数据结构可用三元式表示(D,S,P)。其中:D是数据对象,S是D上的关系, P是对D的基本操作集。× 2. 线性表的链式存储结构具有可直接存取表中任一元素的优点。× 3. 字符串是数据对象特定的线性表。 4. 二叉树是一棵结点的度最大为二的树。× 5.邻接多重表可以用以表示无向图,也可用以表示有向图。× 6.可从任意有向图中得到关于所有顶点的拓扑次序。× 7.一棵无向连通图的生成树是其极大的连通子图。× 8.二叉排序树的查找长度至多为log2n。× <9>.对于一棵m阶的B-树.树中每个结点至多有m 个关键字。除根之外的所有非终端结点 至少有┌m/2┐个关键字。× 10.对于目前所知的排序方法,快速排序具有最好的平均性能。 11. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。× 12. 二维数组是其数据元素为线性表的线性表。 13. 连通图G的生成树是一个包含G的所有n个顶点和n-1条边的子图。× 14. 折半查找不适用于有序链表的查找。 15. 完全二叉树必定是平衡二叉树。 16. 中序线索二叉树的优点是便于在中序下查找直接前驱结点和直接后继结点。 17. 队列是与线性表完全不同的一种数据结构。× 18. 平均查找长度与记录的查找概率有关。 19. 二叉树中每个结点有两个子结点,而对一般的树,则无此限制,所以,二叉树是树的特殊情形。× 20. 算法的时间复杂性越好,可读性就越差;反之,算法的可读性越好,则时间复杂性就越差。× 二.选择题 1. 若对编号为1,2,3的列车车厢依次通过扳道栈进行调度,不能得到 ( e ) 的序列。 a:1,2,3 b:1,3,2 c:2,1,3 d:2,3,1 e:3,1,2 f:3,2,1 2. 递归程序可借助于( b )转化为非递归程序。 a:线性表 b: 栈 c:队列 d:数组 3. 在下列数据结构中( c )具有先进先出(FIFO)特性, ( b )具有先进后出(FILO)特性。 a:线性表 b:栈 c:队列 d:广义表 4. 对字符串s=’data-structure’ 执行操作replace(s,substring(s,6,8),’bas’)

相关文档
最新文档