数据结构复习内容讲解

发布 2021-05-29 01:50:28 阅读 1909

数据结构是相互之间存在一种或多种特定关系的数据元素的集合,表示为:

data_structure=(d, s)

d:元素有限集还分成数值类型和非数值类型。

s:关系有限集。

数据(data)——所有能被计算机识别、存储和处理的符号的集合(包括数字、字符、声音、图像等信息 )。

数据元素(data element)——是数据的基本单位,具有完整确定的实际意义(又称元素、结点,顶点、记录等)。

数据项(data item)——构成数据元素的项目。是具有独立含义的最小标识单位(又称字段、域、属性等)。

数据元素之间的逻辑关系。即从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。逻辑结构可细分为4类:

集合结构: 仅同属一个集合。

线性结构: 一对一(1:1) 线性。

树结构: 一对多(1:n) 非线性。

图结构: 多对多 (m:n) 非线性。

物理结构亦称存储结构,是数据的逻辑结构在计算机存储器内的表示(或映像)。它依赖于计算机。

存储结构可分为4大类:

顺序存储结构。

链式存储结构。

索引存储结构。

散列存储结构。

数据的运算是在数据的逻辑结构上定义的操作算法。它在数据的存储结构上实现。

最常用的数据运算有5种:

插入、删除、修改、查找、排序。

抽象数据类型:由用户定义,用以表示应用问题的数据模型。它由基本的数据类型构成,并包括一组相关的操作。

算法是解决某一特定类型问题的有限运算序列。是一系列输入转换为输出的计算步骤。

算法有5个基本特性:有穷性、确定性、可行性、输入和输出。

算法评价有4个指标:运行时间、占用空间、正确性和简单性。

评价指标中的运行时间,就是用时间复杂度来衡量的。

表现形式:o(f(n))

渐进符号(o)的定义:当且仅当存在一个正的常数 c,使得对所有的 n n0 ,有 f(n) cg(n),则。

f(n) =o(g(n))

3n+2=o(n3n+24n for n2 */

3n+3=o(n3n+34n for n3 */

100n+6=o(n100n+6101n for n10 */

10n2+4n+2=o(n2) /10n2+4n+211n2 for n5 */

6*2n+n2=o(2n6*2n+n2 7*2n for n4 */

常见的时间复杂度,按数量级递增排列依次为:常数阶o(1)、对数阶o(log2n)、线性阶o(n)、

线性对数阶o(nlog2n)、平方阶o(n^2)、立方阶o(n^3)、k次方阶o(n^k)、指数阶o(2^n)。

下面我们通过例子加以说明,让大家碰到问题时知道如何去解决。

1、设三个函数f,g,h分别为 f(n)=100n^3+n^2+1000 , g(n)=25n^3+5000n^2 , h(n)=n^1.5+5000nlgn

请判断下列关系是否成立:

1) f(n)=o(g(n))

2) g(n)=o(f(n))

3) h(n)=o(n^1.5)

4) h(n)=o(nlgn)

(1)成立。题中由于两个函数的最高次项都是n^3,因此当n→∞时,两个函数的比值是一个常数,所以这个关系式是成立的。

(2)成立。与上同理。

(3)成立。与上同理。

(4)不成立。由于当n→∞时n^1.5比nlgn递增的快,所以h(n)与nlgn的比值不是常数,故不成立。

2、设n为正整数,利用大"o"记号,将下列程序段的执行时间表示为n的函数。

1) i=1; k=0

while(i1

while (x>=(y+1)*(y+1))

y++;解答:t(n)=n1/2 ,t(n)=o(n1/2),最坏的情况是y=0,那么循环的次数是n1/2次,这是一个按平方根阶递增的函数。

3) x=91; y=100;

while(y>0)

if(x>100)

x=x-10;y--;

else x++;

解答: t(n)=o(1), 这个程序看起来有点吓人,总共循环运行了1000次,但是我们看到n没有? 没。

这段程序的运行是和n无关的,就算它再循环一万年,我们也不管他,只是一个常数阶的函数。

逻辑结构:1.描述:

线性表是由n (n>=0)个数据元素(结点)a1,a2,….ai,….an组成的有限序列。

其中,数据元素的个数n定义为表长。当n=0时称为空表,非空的线性表(n>0)记为:

a1,a2,….ai,….an)

注意: 1.数据元素ai是一个抽象的符号。

2. ai可取各种数据类型。

3. 一般情况下,同一线性表中的元素具有相同的数据类型。

4. i是元素的序号 (1<=i<=n)

2.逻辑特征:仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。

线性表的运算:

线性表的常见基本运算包括:

置空表setnull(l)

建表creatlist(l)

求表长length(l)

取结点get(l,i)

定位locate(l,x)

插入insert(l,x,i)

删除delete(l,i)

顺序存储:将线性表的结点按逻辑次序依次存放在一组地址连续的存储单元里。

顺序表:采用顺序存储方法存储的线性表称顺序表。

由n个数据元素a1、a2、..an组成的有限序列,称为顺序表。

存储地址的计算:

由于顺序表采用的是顺序存储方法,因此表中的任一结点的存储地址可按下式计算:

loc(ai)=loc(a1)+(i-1)*c 1<=i<=n

这里:loc(a1)为结点a1的存储起址,c为每个结点所占存储单元数。

顺序表是一种随机存取结构。

在c语言中,顺序表用一维数组描述:

typedef int datetype;

#define maxsize 1024;

typedef struct

datatype data[maxsize];

int last;

} sequenlist;

顺序表上的基本运算(实现)

setnull(l): l).last = 1

length(l): l).last+1

get(l,i): l).data[i-1]

1. locate(l,x)

算法思想:将x和线性表中的每一个数据元素比较,若相等,返回比较结点的序号,比较至表尾,没有等于x的节点,则返回0.

int locate(sequenlist *l,datatype x)

int i=0;

while(i<=(l).last)

return(0);

最好情况下: t(n)=1

最坏情况下: t(n)=n

2.插入 insert(l,x,i)

所做工作: 判断是否可插入,从表空间上考虑。

判断插入位置是否合法。

结点后移。将x插入第i个位置。

终端结点下标加1

3. 删除 delete(l,i)

所作工作: 判断删除位置是否合法:

i<1)||i>((l).last+1)

结点前移。for(j=i;j<=(l).last; j++)

(*l).data[j-1]=(l).data[j];

终端结点下标减1 (*l).last--;

删除除算法分析。

删除一个结点时结点的平均移动次数为(n-1)/2

平均时间复杂度o(n)

顺序表的优点:

(1)各结点存储单元物理位置上的邻接关系表示了结点间的逻辑关系,因此,无须增加额外的存储空间表示结点间的逻辑关系。

(2)因其为随机存储结构,故可以随机存储表中任一结点。

顺序表的缺点:

(1)插入和删除运算不方便,通常须移动大量结点,效率较低。

2)难以进行连续的存储空间的预分配,尤其是当表变化较大时。

1、 链式存储:用一组任意的存储单元存储线性表, 逻辑上相邻的结点在物理位置上不一定相邻,结点间的逻辑关系由存储结点时附加的指针字段表示。

2、链表:采用链式存储方法的线性表称为链表。

3、链表的特点:其结点的存储单元可以不连续,每个结点中除存储原表结点中的数据外,还须存储指示其直接后继或前趋结点的地址,以反映结点之间的逻辑关系。因此,链表中每个结点由两部分构成:

数据域和链域。

1、单链表的特点:每个结点只有一个链域,指向其直接后继。

(尾结点除外)。

2、结点结构:

3、图示法表示单链表。

4、单链表的存储结构描述如下:

typedef int dataype;

typedef struct node

linklist;

linklist *head, *p;

区分指针变量和结点变量 :p ,*p

结点的动态分配和释放。

申请一个结点 p=(linklist *)malloc(sizeof(linklist));

释放一个结点 free(p);

尾插法建表:将新结点插入到当前链表的表尾。

linklist *creatlistr( )

char ch;

linklist *head,*s,*r;

head=null;

r=null;

ch=getchar( )

while (ch!=‘

s=malloc(sizeof(linklist))

s->data=ch;

if(head=null) head=s

else r->next=s;

r=s; ch=getchar( )

数据结构期末复习讲解

计算机1405杨程皓。版权所有,翻版必究。附录是最小生成树和拓扑排序的 及讲解,还有一些主要算法的演示。一 基本概念及基本结构。1 数据结构及其逻辑结构 存储 物理 结构的基本概念。答 数据结构是相互之间存在一种或多种特定关系的数据元素的集合,在任何问题中,数据元素都不是孤立存在的,而是在他们之间存...

数据结构实验内容安排

数据结构 实验内容安排。1.实验一简单程序设计实验 2学时 最迟提交时间 2016年9月18日。2.实验二线性表实验 3学时 最迟提交时间 2016年9月25日。3.实验三栈和队列实验 4学时 最迟提交时间 2016年10月9日。4.实验四树和二叉树实验 3学时 最迟提交时间 2016年10月16日...

数据结构复习题1 和答案讲解

说明 此复习题为复习专用,其给定了期末考试的主要范围,并非给定考试原题,考试时相关的题目基本都要进行改动。因此同学们请注意,不要去背答案,要将题理解并做会。请注意这决不是原题,只有弄会才可能通过 1 数据结构主要研究的三个内容为以及定义在该结构上的。2 数据结构从逻辑结构上可分为线性结构与非线性结构...