常州工学院数据结构作业一 绪论 答案

(全部做在作业本上)所有题目不用抄

1.1 简答题

(1)简述下列概念:数据、数据元素、数据项、数据对象、数据结构

数据:所有能够输入到计算机中,且能被计算机处理的符号的集合。

数据元素:是数据(集合)中的一个“个体”,它是数据的基本单位。

数据项:数据项是用来描述数据元素的,它是数据的最小单位。  

数据对象:具有相同性质的若干个数据元素的集合,如整数数据对象是所有整数的集合

数据结构:是指带结构的数据元素的集合。

(2)数据数据结构由哪三个方面构成?逻辑结构有几种表示形式?逻辑结构分为哪几类?存储结构分为哪几类?数据运算分为哪两个层次?

数据结构的构成:逻辑结构+存储结构+数据运算

逻辑结构表示:直观表示+二元组表示+图形表示

存储结构:顺序存储、链式存储、索引存储、哈希(散列)存储

数据运算:运算描述+运算实现

1.2.计算题(试分析下面各程序段的语句频度和时间复杂度,要有过程)

(1)x=90; y=n; 

while(y>0)

if(x>100)

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

else x++;

       x从91变化到101(注意:第1次是从90变化到101,多循环一次),一共10次循环,然后第11次循环中,x再回到91,y减1。上述过程反复进行,直到y从n变为0为止,所以语句频度大约为11n+1,即时间复杂度T(n)=11n+1=O(n)

(2)s=0;

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

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

         s+=B[i][j];

     T(n)=1+(1+2)+(1+2+3)+(1+2+…i)+…(1+2+…+n-1) =(n-2)(n-1)/2 =O(n2)

(3)i=1;

     while(i<=n)

        i=i*3;

    设循环执行了m次,i从1开始,每一次循环i在原值上再乘以3,所以循环结束时i=3m3m<=n,m<=log3n ,所以T(n)= log3n =O(logn)

(4)x=n; //n>1

y=0;

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

    y++;

设循环执行了m次,y0开始,每一次循环y加1,所以循环结束时y=m,(m+1)* (m+1)<=x=n,m<=    -1,所以T(n)=    -1 =O(    )

     (5) for(i=0;i<n;i++)    //求出最好,最坏和平均时间复杂度

          if(a[i]==x) break;      

     然如果a[0]=x时,循环执行一次,当组中有x循环执行n,所以好时间复杂度Tbest(n)=O(1),最坏时间复杂度Tworst=O(n)果a[i]=x,循环正好执行i,所平均时间复杂度T(n)=1/n*(1+2+3+…+n)=(n-1)/2 =O(n)

1.3 应用题

1.试举一个例子,叙述逻辑结构和存储结构两方面的相互关系。(书上习题3)

逻辑结构由数据元素的集合和数据元素之间的关系组成。它是面向用户的

存储结构是数据元素及其关系在计算机存储器中的存储方式。它是面向程序员的。

逻辑结构和存储结构都是描述数据结构的两个方面。

一种逻辑结构可以有多种存储结构相对应。即一种逻辑结构可以映射成不同的存储结构。比如学生表,逻辑结构是学生的集合和学生之间的相邻关系。在计算机中可以有不同的存储结构。比如用结构体存储学生表,就是顺序存储结构。也可以用链表存储学生表,就是链式存储结构。

2.设有数据逻辑结构S=(D,R),试按题中所给条件画出逻辑结构的图示,并确定相对于关系R,哪些结点是开始结点,哪些结点是终端结点?

D={d1,d2,…,d9}     

R={<d1,d3>,<d1,d8>,<d2,d3>,<d2,d4>,<d2,d5>,<d3,d9>, <d5,d6>,<d8,d9>,<d9,d7>, <d4,d7>, <d4,d6>}

开始结点d1,d2  终端结点d6,d7

3. 有理数r可以唯一的表示成一个既约分数:r=p/q 其中p,q是整数,q≠0,并且p和q没有最大公约数,即(p,q)=1。有理数的运算包括构造、销毁、求分子、求分母、加减乘除等。试用抽象数据类型来描述。(参考书上p14 复数的抽象数据类型描述)

例如 r=0.33333…… 可以表示成  r=1/3 其中 p=1,q=3;

r=-3.3可以表示成  r=-33/10 其中 p=-33,q=10;

r=5   可以表示成  r=5/1 其中 p=5,q=1;

r=0.8 可以表示成 r=4/5其中 p=4,q=5;

但是r=8/10,由于8和10有最大公约数2,不是既约分数。  

ADT Fraction  

{

数据对象:

      D={ p,q| p,q均为整数,(p,q)=1且q≠0 }

数据关系:

      R={<p,q> |q是分子,p是分母}

数据运算:

  InitFaction(&r,int p, int q):构造有理数r

DestroyFaction(&r):销毁有理数r

GetNumerator(r,int &p) :返回有理数的分子

GetDenominator (r,int &q) :返回有理数的分母

Add(r1,r2,&sum) :返回两个有理数的和

Sub(r1,r2,&diff) :返回两个有理数的差

Mult(r1,r2,&prod) :返回两个有理数的积

Div(r1,r2,") :返回两个有理数的商

}

4.对于第3题的有理数r=1/3,试设计出顺序存储结构和链式存储结构。(参考书上p7学生表存储)

提示:顺序存储可以先定义结构体,再定义一个结构体变量存放。

链式存储可以用链表存放,链表有两个结点,第一个结点存放分子,第二个结点存放分母。

//顺序存储定义

typedef struct {

     int numerator, denominator;  // numerator是分子,denominator是分母

} Fraction;

//定义一个结构体变量,存储有理数1/3

Fraction r = {1,3};

//链式存储定义

typedef struct node {

     int data;           //数据域data,存放分子或分母的值,类型是整数

     struct node *next;  //指针域next,表示分子和分母的关系

} FractionNode;          //结点定义

//建立两个结点组成的链表F来存储有理数1/3 ,其中第一个结点的data为1,表示分子,第二个结点的data为3,表示分母。第一个结点的next指向第二个结点,表示分子和分母之间的关系。指针F指向第一个结点,表示链表开始,第二个结点的next为空,表示链表结束。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值