数据结构(c语言版)复习知识点上课讲义

数据结构(c语言版)复习知识点上课讲义
数据结构(c语言版)复习知识点上课讲义

第一章绪论

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语言版期末考试试题(有答案)

“数据结构”期末考试试题 一、单选题(每小题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的线性表进行索引顺序查找,并假定每个子表的长度均

数据结构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

数据结构(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

数据结构(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语言描述)》期末试卷要点

专业 《数据结构(C 语言描述)》期末试卷 ( — 学年 第 学期) 一、填空(10分) 1、一个m 阶B-树中,每个结点最少有( ceil(m/2) )个儿子结点,m 阶B+树中每个结点(除根外)最多有( m )个儿子结点. 2、n(n>0)个结点构成的二叉树,叶结点最多有( floor((n+1)/2) )个,最少有( 1 )个。若二叉树有m 个叶结点,则度为2的结点有( m-1 )个。 3、顺序查找方法适用于存储结构为( 顺序表和线性链表 )的线性表,使用折半查找方法的条件是(查找表为顺序存贮的有序表 ) 4、广义表A=(( ),(a ,(b ,c)),d)的表尾Gettail(A)为( ((a,(b,c)),d) ) 5、直接插入排序,起泡排序和快速排序三种方法中,( 快速排序 )所需的平均执行时间最小;( 快速排序 )所需附加空间最大。 二、选择(10分) 1、倒排文件的主要优点是:( C ) A 、便于进行插入和删除 B 、便于进行文件的合并 C 、能大大提高基于非主关键字数据项的查找速度 D 、易于针对主关键字的逆向检索 2 下面程序段的时间复杂性为( C ) y=0; while(n>=(y+1)*(y+1)) { y++; } A 、O(n) B 、O(n 2) C 、 O(sqrt(n)) D 、 O(1) 3、若从二叉树的任一结点出发到根的路径上所经过的结点序列按其关键字有序,则该二叉树是( C ) A 、二叉排序树 B 、哈夫曼树 C 、堆 D 、AVL 树 4、栈和队列都是( B ) A 、顺序存储的线性结构 B 、限制存取点的线性结构 C 、链式存储的线性结构 D 、限制存取点的非线性结构 5、用顺序查找方法查找长度为n 的线性表时,在等概率情况下的平均查找长度为( D ) A 、n B 、n/2 C 、(n-1)/2 D 、(n+1)/2 三、简答(30分) 1、已知一棵二叉树的前序扫描序列和中序扫描序列分别为ABCDEFGHIJ 和BCDAFEHJIG ,试给出该二叉树的后序序列并绘出该二叉树对应的森林。 院(系) 班级 姓名 学号 ……………………………………………装…………………………订………………………线……………………………………………

数据结构(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. 向量、栈和队列都是线性结构,可以在向量的任何位置插入和删除元素;对于栈只能在栈顶插入和删除元素;对于队列只能在队尾插入和队首删除元素。 21. 栈是一种特殊的线性表,允许插入和删除运算的一端称为栈顶。不允许插入和删除运算的一端称为栈底。 22. 队列是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。 23. 不包含任何字符(长度为0)的串称为空串;由一个或多个空格(仅由空格符)组成的串称为空白串。 24. 子串的定位运算称为串的模式匹配;被匹配的主串称为目标串,子串称为模式。

数据结构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

数据结构教案C语言版

数据结构教案C语言版 Last updated on the afternoon of January 3, 2021

课程教案 课程名称:数据结构 授课教师: 学习对象: 任课时间: 一、学生情况分析 数据结构是计算机专业的一门核心专业课程。学生在前期的学习中已经学习了C语言程序设计课程。通过本课程学习使学生对提高编写程序的能力以及解决实际问题的能力。 二、课程教学目标 《数据结构》是计算机学科中一门核心专业基础课。主要介绍如何合理地组织数据、有效地存储和处理数据,正确地设计算法以及对算法的分析和评价。通过本课程的学习,使学生深透地理解数据结构的逻辑结构和物理结构的基本概念以及有关算法,培养基本的、良好的程序设计技能,编制高效可靠的程序,为学习操作系统、编译原理和数据库等课程奠定基础。 三、课程教学内容 第一章绪论 教学内容: 1)什么是数据结构

2)抽象数据类型概念;数据类型;数据抽象与抽象数据类型;用于描述数据结构的语言 3)数据结构的抽象层次 4)算法定义 5)性能分析与度量;算法的性能标准;算法的后期测试;算法的事前估计;空间复杂度度量;时间复杂度度量;时间复杂度的渐进表示法; 教学要求: 了解:数据结构基本概念及数据结构的抽象层次 了解:抽象数据类型概念 了解:算法的定义及算法特性 掌握:算法的性能分析与度量方法 第二章线性表 教学内容: 1)线性表的定义和特点 2)线性表的顺序存储及查找、插入和删除操作 3)线性表的链式存储及查找、插入和删除操作 4)使用线性表的实例 教学要求: 了解:线性表的定义和特点 熟练掌握:线性表的顺序存储结构的查找、插入和删除等基本操作 熟练掌握:单链表、循环链表及双向链表的定义及实现 掌握:熟练掌握单链表的应用方法

严蔚敏数据结构题集C语言版完整答案

严蔚敏 数据结构C 语言版答案详解 第1章 绪论 1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。 解:数据是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 数据对象是性质相同的数据元素的集合,是数据的一个子集。 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 存储结构是数据结构在计算机中的表示。 数据类型是一个值的集合和定义在这个值集上的一组操作的总称。 抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。是对一般数据类型的扩展。 1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。 解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。抽象数据类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。 1.3 设有数据结构(D,R),其中 {}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r = 试按图论中图的画法惯例画出其逻辑结构图。 解: 1.4 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。 解: ADT Complex{ 数据对象:D={r,i|r,i 为实数} 数据关系:R={} 基本操作: InitComplex(&C,re,im) 操作结果:构造一个复数C ,其实部和虚部分别为re 和im DestroyCmoplex(&C) 操作结果:销毁复数C Get(C,k,&e) 操作结果:用e 返回复数C 的第k 元的值 Put(&C,k,e) 操作结果:改变复数C 的第k 元的值为e

数据结构(c语言版)第1章习题答案

1 第一章概论 自测题答案 一、填空题 1. 数据结构是一门研究非数值计算的程序设计问题中计算机的 操作对象 以及它们之间的 关系 和运算等的学科。 2. 数据结构被形式地定义为(D, R ),其中D 是 数据元素 的有限集合,R 是D 上的 关系 有限集合。 3. 数据结构包括数据的 逻辑结构 、数据的 存储结构 和数据的 运算 这三个方面的内容。 4. 数据结构按逻辑结构可分为两大类,它们分别是 线性结构 和 非线性结构 。 5. 线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。 6. 在线性结构中,第一个结点 没有 前驱结点,其余每个结点有且只有 1个前驱结点;最后一个结点 没有 后续结点,其余每个结点有且只有1个后续结点。 7. 在树形结构中,树根结点没有 前驱 结点,其余每个结点有且只有 1 个前驱结点;叶子结点没有 后续 结点,其余每个结点的后续结点数可以任意多个 。 8. 在图形结构中,每个结点的前驱结点数和后续结点数可以 任意多个 。 9.数据的存储结构可用四种基本的存储方法表示,它们分别是顺序 、 链式 、 索引 和 散列 。 10. 数据的运算最常用的有5种,它们分别是插入 、 删除、修改、 查找 、排序。 11. 一个算法的效率可分为 时间 效率和 空间 效率。 二、单项选择题 ( B )1. 非线性结构是数据元素之间存在一种: A )一对多关系 B )多对多关系 C )多对一关系 D )一对一关系 ( C )2. 数据结构中,与所使用的计算机无关的是数据的 结构; A) 存储 B) 物理 C) 逻辑 D) 物理和存储 ( C )3. 算法分析的目的是: A) 找出数据结构的合理性 B) 研究算法中的输入和输出的关系 C) 分析算法的效率以求改进 D) 分析算法的易懂性和文档性 ( A )4. 算法分析的两个主要方面是: A) 空间复杂性和时间复杂性 B) 正确性和简明性 C) 可读性和文档性 D) 数据复杂性和程序复杂性 ( C )5. 计算机算法指的是: A) 计算方法 B) 排序方法 C) 解决问题的有限运算序列 D) 调度方法 ( B )6. 计算机算法必须具备输入、输出和 等5个特性。 A) 可行性、可移植性和可扩充性 B) 可行性、确定性和有穷性 C) 确定性、有穷性和稳定性 D) 易读性、稳定性和安全性 三、简答题 1.【严题集1.2②】数据结构和数据类型两个概念之间有区别吗? 答:简单地说,数据结构定义了一组按某些关系结合在一起的数组元素。数据类型不仅定义了一组带结构的数据元素,而且还在其上定义了一组操作。 2. 简述线性结构与非线性结构的不同点。 答:线性结构反映结点间的逻辑关系是 一对一的,非线性结构反映结点间的逻辑关系是多对多的。 四、【严题集1.8④】分析下面各程序段的时间复杂度 2. s=0; for i=0; i

数据结构-(严蔚敏C语言版)-学习、复习提纲知识讲解

期末复习 第一章 绪论 复习 1、计算机算法必须具备输入、输出、可行性、确定性、有穷性5个特性。 2、算法分析的两个主要方面是空间复杂度和时间复杂度。 3、数据元素是数据的基本单位。 4、数据项是数据的最小单位。 5、数据结构是带结构的数据元素的集合。 6、数据的存储结构包括顺序、链接、散列和索引四种基本类型。 数据结构 算 法 数据:计算机处理的信息总称 数据项:最小单位 数据元素:最基本单位 数据对象:元素集合 数据结构:相互之间存在一种或 多种特定关系的数据元素集合。 概念:数据元素之间的关系 线性结构:一对一 非线性结构 树:一对多 图:多对多 顺序存储结构 链表存储结构 索引。。。 散列。。。 算法描述:指令的有限有序序列 有穷性 确定性 可行性 输入 输出 时间复杂度 空间复杂度

第二章 线性表 复习 1、在双链表中,每个结点有两个指针域,包括一个指向前驱结点的指针 、一个指向后继结点的指针 2、线性表采用顺序存储,必须占用一片连续的存储单元 3、线性表采用链式存储,便于进行插入和删除操作 4、线性表采用顺序存储和链式存储优缺点比较。 5、简单算法 第三章 栈和队列 复习 定义 逻辑关系:前趋 后继 节省空间 随机存取 插、删效率低 插入 删除

1、 栈和队列的异同点。 2、 栈和队列的基本运算 3、 出栈和出队 4、 基本运算 第四章 串 复习 存储结构 栈的概念:在一端操作的线性表 运算算法 栈的特点:先进后出 LIFO 初始化 进栈push 出栈 pop 顺序队列 循环队列 队列概念:在两端操作的线性表 假溢出 链队列 队列特点:先进先出 FIFO 基本运算 顺序: 链队: 队空:front=rear 队满:front=(rear+1)%MAXSIZE 队空: rear 初始化 判空 进队 出队 取队首元素

数据结构考试试卷(C语言版)

********学院 学期期末试题——数据结构(C 语言) 一.选择题(10×2分):共10小题,请将答案填入题中的括号中,每小题只有一个正确答案,错选或不选均不给分。 1.组成数据的基本单位是( ) A.数据项 B.数据类型 C .数据元素 D .数据变量 2.下面程序段的时间复杂度为( )。 for(i=1;i<=n;i++) for(j=i;j<=n;j++) s++; A .O(1) B .O(n) C .O(n )log 2n ) D .O(n 2 ) 3.在一个长度为n 的顺序存储线性表中,向第i 个元素(1≤i ≤n+1)之前插入一个新元素时,需向后移动( )个元素。 A .n-i B .n-i+1 C .n-i-1 D .i 4.设单链表中指针p 指向结点A ,若要删除A 后的结点且该结点存在,则需要修改指针的操作为( )。 A .p->next=p->next->next B .p=p->next C .p=p->next->next D .p->next=p 5.若让元素1,2,3依次进栈,则出栈次序不可能出现( )种情况。 A 、3,2,1 B 、2,1,3 C 、3,1,2 D 、1,3,2 6.在一个循环顺序队列中,队首指针指向队首元素的( )位置。 A 、当前 B 、后面 C 、前一个 D 、后一个 7.假定一个链队的队首和队尾指针分别为front 和rear ,则判断队空的条件是( )。 A 、front==NULL B 、front!=NULL C 、rear!=NULL D 、front==rear 8.二叉树第i(i ≥1)层最多有( )个结点。 A .2i B . 2i-1 C .2i D .2i -1 9.如果结点A 有3个兄弟,而且B 为A 的双亲,则B 是度为( ) A.4 B.3 C .5 D .1 10.当待排序序列的关键码是随机分布时,下列哪种排序算法的平均时间复杂度最优( )。 A .直接插入排序 B .直接选择排序 C .快速排序 D .冒泡排序 二.填空题(30分):每空2分

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

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

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

sum = s ; 。9.下面程序段的时间复杂度是O(n*m) for( i =0; i

数据结构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.简述逻辑结构的四种基本关系并画出它们的关系图。

数据结构(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

相关文档
最新文档