数据结构 第一章习题

一.单项选择

1.在数据结构中,从逻辑上可以把数据结构分为线性结构和非线性结构。

线性结构包括表,栈,队列,数组,串和广义表,非线性结构包括树,图

图:数据结构:图(Graph)【详解】_数据结构图_UniqueUnit的博客-CSDN博客​​​​​​

广义表:​​​​​​9. 广义表 - 广义表概念,存储结构,深度/长度,复制算法_~QwQ~的博客-CSDN博客​​​​​​

2,与数据元素本身的形式,内容,相对位置,个数无关的是  逻辑结构

存储结构:顺序存储结构和链式存储结构(逻辑与位置)

存储实现1.2 存储实现 - 知乎 (zhihu.com)(方便观看在这里也写了一下)

存储实现的基本目标是建立数据的机内表示,包括两部分:
1. 数据元素的存储
2. 数据元素之间的关系的存储
有时为了方便运算实现,还可能会增加一些辅助信息的存储。
数据的机内表示称为数据的物理结构

数据物理结构的组成
1. 存储结点,每个存储结点存放一个数据元素
2. 数据元素之间关系的存储,即:逻辑结构的机内表示
3. 附加信息,便于运算实现而设置的一些"哑结点"(链表中的头结点)
4. 物理结构主要讨论的是数据元素之间关系的表示,由于每个数据元素被表示为一个存储结点,所以逻辑结构就由存储结点之间的关联方式间接地表示。

存储结点间的关联的4种实现方式
1. 顺序实现:所有的存储结点存放在一块连续的存储区域中,结点之间的逻辑关系可以通过结点的存储位置来实现。即可以通过结点的存储位置找出与它由关系的结点的存储位置。在高级语言中,一块连续的存储空间通常可用一个数组来表示。因此,顺序实现通常用一个数据元素类型的数组来存储。

2. 链接实现:存储结点可以分散地存放在存储器的不同位置,结点之间的关系通过一个指针显式地指出。因此,在链接存储中,每个存储结点包含两部分:数据元素部分和指针部分,数据元素部分保存数据元素的值,指针部分保存一组指针,每个指针指向一个与本结点有关系的结点

3. 散列存储方式:也称哈希存储,是专用于集合结构的数据存放方式。在哈希存储中,各个结点均匀分布在一块连续的存储区域中,用一个哈希函数将数据元素和存储位置关联起来。

4. 索引存储方式所有的存储结点按照生成的次序连续存放,另外设置一个索引区域表示结点之间的关系。

逻辑结构:是数据元素间逻辑关系的描述,与数据的存储无关,是独立于计算机的。通常有四种基本结构:集合结构,线性结构,树形结构和图结构。

运算实现是程序员完成运算的实现算法,是具体的,是基于存储结构的。

3.通常要求同一逻辑结构中的所有数据元素具有相同的特征,这意味着 不仅数据元素所包含的数据项个数要相同,而且对应数据项的类型要一致

4.数据元素是组成数据的基本单位。

数据项是组成数据元素的,有独立含义的,不可分割的最小单元。

数据结构是相互间存在一种或多种特定关系的数据元素的集合

5.算法的时间复杂度取决于:问题的规模  待处理数据的初态

9.顺序存储结构中数据结构之间的逻辑关系是由存储关系表示的

10.链式存储结构中的数据元素之间的逻辑关系是由指针表示的

11.与数据的存储关系有关的术语是链表

12.抽象数据类型的三个组成部分别为:数据对象,数据关系,基本操作

13.算法是解决问题的有限运算序列

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

O(lb n)

x=2;
while(x<n/2)
x=2*x;//基本语句。
//2*x=n,x=logn

O(n)

int fact(int n)
{
  if(n<=1)return 1;
  return n*fact(n-1);//基本语句
}//n!

O(n lb n)

count=0;
for(k=1;k<=n;k*=2)
  for(j=1;j<=n;j++)
   count++;//基本语句
//循环嵌套,时间复杂度由深层内循环的基本语句频度决定

第一个for循环O(lb n)
第二个for循环O(n)
相乘

O(n*1/2)

int func(int n)
{ 
  int i=0,sum=0;
  while(sum<n)sun+=++i;//先++i,再sum=sum+i 基本语句
  return i;
}
//第一次  i=1  sum=1
    2      2     1+2
    3      3     1+2+3


   m      m     1+2+3+4....+m=n
由公式m^(1+m)/2=n,2n=m+m^2,忽略常数,加m对结果影响不大
得到m=根号n

二.应用题

4,分析下面个段程序的时间复杂度

x=90; y=100; 

while(y>0)

if(x>100)

 {x=x-10;y--;}

else x++;//基本语句,分析程序,执行次数为常数阶

//O(1)
for (i=0;  i<n; i++)

for (j=0; j<m; j++)

a[i][j]=0;//基本语句

第一个for循环O(n)
第二个for循环O(m)
整个程序时间复杂度O(nm)
s=0;

     for i=0; i<n; i++)

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

         s+=B[i][j];//基本语句

        sum=s;

第一个for循环O(n)
第二个for循环O(n)
整个程序时间复杂度O(n*2)

i=1;

     while(i<=n)

        i=i*3;//基本语句

i*3=n,由对数运算得运算次数i=log3n

时间复杂度 O(log3n)  3为底

总结:计算时间复杂度先找到运行次数最多的语句,基本语句,根据基本语句运算出次数和n之间关系,结果为时间复杂度括号内内容。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值