画 出 
定 
义 
问 题 
逻 辑 纩 构 
存 链 式 存 储 结 构 
结 索 引 存 储 结 构 
实 现 操 作 
。 树 形 结 构 
散 列 存 储 结 构 
顺 序 存 储 结 构 
集 合 结 构 
线 性 结 构 
图 形 结 构

不同结构操作效率是不一样的.

顺序存储结构也叫连续存储结构

 

 

存取方式随机存取、串行(顺序)存取、直接存取

存取方式→顺序、链式、索引、散列

存取 随串直

李明到存钱机取钱,取了100元,去小吃摊买了1瓶矿泉水和1窜羊肉串和1个芝麻饼

存储  顺链索散

然后去商店买了老陈醋,正准备回家是,发现孙子把自行车链子用索锁住了,他气愤冲了过去扇了孙子一巴掌

 

 

          

                   定义/特点  

计算机生成了可选文字:
算法的定义
至
可确有或
个
行定穷0
性性性个
上
输
的
入输
出
算法5个特点
解题步骤
实现
估
计
规
模
时
复
杂
度
因
评价际准
空
复
杂
度
O

 

 

抽象数据类型 ADT\(\begin{equation}\begin{cases}     存储+操作,  \\     描素规则  \\ \end{cases}\end{equation}\)

ADT  类型名

{

    实现每一个操作

 

}

数据结构的定义(DS)+算法评价方法+ADT 描述形式

[单选] 数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为()。
A.存储结构
B.逻辑结构
C.顺序存储结构
D.链式存储结构
C
【◆参考答案◆】:C

1.1数据结构的基本概念和术语

1.基本术语

1数据:描述客观事物的数字、字符以及所有能输入到计算机中并被计算机程序处理的符号的集合。(数字、字符、声音、图形、图像等等)

2数据元素:数据的基本单位,在计算机程序中常常作为一个整体进行考虑和处理,如纪录/结构。

3数据项:数据的不可分割的最小单位,如结构中的域。

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

 

2.数据结构

1)定义:是相互之间存在一种或多种特定关系的数据元素的集合。

另一种定义:按照逻辑关系组织起来的一批据,按一定的存储方法把它存储在计算机中,并在这些据上定义了一个运算的集合。

 

2)四种基本结构(逻辑结构)

集合:元素仅属于同一个集体,没有其他关系。

能线性结构:存在一对一关系,序列相邻,次序关系。

树型结构:存在一对多关系,层次关系

图状结构(网状结构):存在多对多关系,任意性。

存储器模型:一个存储器M是一系列固定大小的储单元

每个单元U有一唯一的地址A(U),该地址被连地编码

每个单元U有一个唯一的后继单元U'=succ(U)

四种存储结构:顺序存储、链接存储、索引存储、散列存储

 

 

3.数据结构的划分

(1)按数据结构的性质划分

集合:元素仅属于同一个集体,没有其他关系。

数据的逻辑结构一数据元素之间的逻辑关系

(设计算法一数学模型)。数据的物理结构一数据结构在计算机中的映像

(存储结构,算法的实现)

 1)____是组成数据的基本单位,是数据集合的个体。

数据元素

1.2抽象数据类型一ADT

定义:是指基于一个逻辑类型的数据模型以及定义在该模型上的一组操作。每一个操作由它的输入和输出定义。

 抽象的与具体的相对应

示例:

int a,b;则ab可以进行+,一,*,/的运算

26则是具体的int数据

数据结构的三要素

 

给出四种基本数据结构名称及其关系图示。

线性结构,集合结构,树形结构,图形结构

1.3算法和算法分析

1.算法

定义:指一系列确定的而且是在有限步骤内能完成的操作。

 

 

3 .算法设计的要求

1) 正确性

2 )可读性

首先是给人读,然后才是机器执行

3 )健壮性容错性

4 )效率与低存储量需求

 

 

2.算法与数据结构的关系

数据计算机科学家沃斯(N.Wirth)提出的:

"算法+数据结构=程序

揭示了程序设计的本质:实问题选择了种好的数据

结构,加上设计一个好的《于描述际问题的数据结构。算与数据结构是互相互相系的。

一个算法总是建立在一定数据结构上的:反之,算法不确

定,就无法决定如何构造数据。

如何设计一个“”的算法

正确性 算法应能够正确地解决求解问题

可读性  算法应具有良好的可读性,以帮助人们理解

健壮性  输入非法数据时,算法能适应的做出反应或进行处理

效率与存储量  效率是指算法执行时间,存储量需求是指算法执行过程中所需最大存储空间

 

算法与数据结构关系举例

1:编写程序查询某城市某人的电话号码建立一张登记表,

存放2个数据项:

姓名+Te1

好的算法取决于这张表的结构及存储方式:

√将出结点照姓名顺序地存储在计算机中,依次查找,

√建立一张姓氏引表:姓+表中的起始地址则不需查找其他

姓氏,查找效得到提高。

 

算法与数据结构关系举例

总结

解决问题的关键步骤是先选取合适的数据结构表示问题,才能写出有效的算法。

 

23.数据结构王道考研第一章:绪论.第二节:算法和算法评价7,一.3[2011年计算机联考真题]

设n是描述问题规模的非负整数,下面程序片段的时间复杂度是( ) 。  

 

   x=2 ;

      while (x<n/2)

      x=2*x ;

A. O(log2n)
B . O(n)
C. O(nlog2n)
D . O(n²)
A

 A. [解析]

1.找出基本操作一-最深层 循环内的语句。

2.找出问题规模并确定关于n的函数式。

初始(第0轮) x=2  

第1轮循环结束x=4

第2轮循环结束x=8 

第3轮循环结束x=16 

发现x=2, 4, 8, 16, 32......

第k轮循环结束x=2k+l, 不再进入第k+1轮。

循环体执行第k次之后,x=2k+1, while条件要求x<n/2,此时若不满足while条件,则x=2k+1>=n/2, k>=logzn-2,时间复杂度0(log2n)

 23.数据结构王道考研第一章:绪论.第二节:算法和算法评价7,一.5[2013年计算机联考真题]

已知两个长度分别为m和n的升序链表,若将它们合并为一个长度为m+n的降序链表,则最坏情况下的时间复杂度是()。

 

A. O(n)
B . O(mxn)
C . O(min(m, n))  
D . O(max(m, n))
D

D.1.将链表从升序合并后变为降序,采用头插法比较方便。

2.每次取出m和n中剩下的最小元素,插入到head结点后,类似于归并排序的思想。若某一个表比较完毕,另一个表的余下元素直接依次用头插法插入到头结点后。

 

最坏情况:  两个表中元素依次比较,时间复杂度为O(max(m,n))

推广:O(max(m, n))=O(m+n)

23.数据结构王道考研第一章:绪论.第二节:算法和算法评价7,一.5[2014年计算机联考真题]

 

下列程序段的时间复杂度是( ) 。

 

count=0;

for(k=1;k <=n;k*=2)

for(j=1;j<=n;j++)

count+ +;

A. O(log2n)  
B . O(n)
C . O(nlog2n)
D . O(n2)
C

C基本操作: count++;

1.内外层循环相互独立(循环变量k和j互不影响),外层循环每执行一轮,内层都会完成一次完整的循环。

1.外层k=1,2,4,8,16…假设外层循环执行i次结束,不再进入第i+1次循环,k=2i>=n得到i>=log2n,则外层时间复杂度为0(log2n)

2.内层j=1,2,3,4, ....假设内层循环执行m次结束,不再进入第m+1次循环,则j=m+1>=n, 得到m>=n-1,则内层:时间复杂度为o(n)

3.由外相乘得到总时间复杂度为o(nlog2n)

23.数据结构王道考研第一章:绪论.第二节:算法和算法评价8,一.10

 

以下算法中加下划线语句的执行次数为()

Int m=0,I,j;

for(i=1; i<=n; i++)

for(j=1;j<=2*i;j++)

m++;

A. n(n+1)
B.n
C. n+1
D.n²
A

i的取值

j的取值范围

j进入循环最内层的次数

1

1,2

2

2

1,2,3,4

4

3

1,2,3,4,5,6

6

…I

…i…2i

2i

n

1…2n

2n

A.2+4+6+…+2n=1/2(2+2n)×n=n(n+1)

 

 

()算法效率的衡量方法和准则

一个特定算法的运行工作量的大小,只依赖于问题的规模(通常用整数量n表示)或者说,它是问题规模的函数。

假如,随着问题规模n的增长,算法执行时间的增长率和f(n)的增长率相同,则可记作:

T (n) = O(f(n))

T (n)为算法的(渐近)时间复杂度。

 

如何估算算法的时间复杂度?

算法=控制结构+原操作

(固有数据类型的操作)

算法的执行时间=原操作(i)的执行次数X原操作(i)的执行时间

算法的执行时间原操作执行次数之和成正比

对 数 函 数 く 幂 函 数 く 指 数 函 数

6.空间复杂度

1)存储算法本身所占用的空间

2)算法的输入/输出数据占用的空间

3)算法在运行过程中临时占用的辅助空间

原地工作:若辅助空间相对于输入数据量是常数,则称算法是原地工作。

若所占空间量依赖于特定的输入,按最坏情况来分析

 

 

 结构体:不同类型变量组合在一起构成的变量。

typedef struct

{

    int a;

    float b;

    char C;

    …

}结构体名


 

typedef struct 结构名

{

    int a;

    float b;

    char C;

    struct 结构名 *d;

    …

}结构体名

 

int*P=NULL;

void getResult (int *&P)

{

    …

    p=q;

    …

}



调用: getResult (p) ;

p前加&定义成引用型,在*与变量名间加&

q的值就会变成p的值.

希望对变量改变,改变结果对我们来说很重要才定义成引用型(这种用c++方法)

 

 

C++转变成c语言

​
 int result =0;

void getResult(int &r)

{

    ++r;

}

调用getResult(result);

↓ plainc

int result = 0;

void getResult(int *r)

{

    ++r;

}

调用getResult(&result);

​

 

 

int *p = NULL;

void getResult(int *p)

{

    …

    p = q;

    …

}

调用getResult(p);

↓ plainc

int *p = NULL;

void getResult(int **p)

{

    …

    *p = q;

    …

}

调用getResult(&p);

定义成指针的指针在变量名字前加两个**,(二级指针)

如下程序段:

for(i=1;i<=9;i++)
    for(j=i+1;j<=10;j++)
        i++;

其中语句x++执行的次数为

执行的语句频度为n(n-1)/2=10(10-1)/2=45次

4、当输入为abc#时,写出调用pr函数的输出结果。

#include<stdio.h>
#pragma warning(disable:4996)
void pr()
{
	char ch;
	scanf("%c", &ch);
	if (ch != '#')pr();
	printf("% c", ch);
}

int main()
{
	pr();
	return 0;
}

#cba

 2、数据结构研究内容主要包括数据的逻辑结构和数据的物理结构。请分别简述逻辑结构和物理结构的含义,并简要指出线性表的两种常见物理结构。

逻辑结构
简单来说,数据的逻辑结构就是数据间的逻辑关系,而与他们在计算机中的存储位置无关。而按照数据间的关系,我们可以将逻辑结构分为线性结构和非线性结构。

物理结构
逻辑结构存储对象之间的关系,而物理结构指数据的逻辑结构在计算机存储空间的存放形式。通俗的讲,物理结构指的是数据在物理存储空间上选择集中存放还是分散存放,这很好理解。常见的存储结构有顺序存储、链式存储、索引存储以及散列存储(哈希表)。