数据结构第一章绪论(例题+课后答案)

//例1.5
#include<iostream>
#include<math.h>
using namespace std;
float d, x, x1, x2;
void solution(float a, float b, float c)
{
	d = b * b - 4 * a*c;
	if (d > 0)
	{
		x1 = (-b + sqrt(d)) / (2 * a);
		x2 = (-b - sqrt(d)) / (2 * a);
		cout << "两个实根:" << "x1=" << x1 <<" "<< "x2=" << x2<<endl;
	}
	else if (d == 0)
	{
		x = (-b) / (2 * a);
		cout << "一个实根:" << "x=" << x<<endl;
	}
	else
		cout << "不存在实根"<<endl;
}
int main()
{
	cin >> x >> x1 >> x2;
	solution(x, x1, x2);
}
//例1.9
#include<iostream>
using namespace std;
void fun(int a[],int n,int k)
{
	int i;
	if (k == n - 1)
	{
		for (i = 0; i < n; i++)
			printf("%d\n", a[i]);
	}
	else
	{
		for (i = k; i < n; i++)
			a[i] = a[i] + i * i;
		fun(a, n, k + 1);
	}
}
int main()
{
	int a[10] = { 0 }, n, k;
	cin >> n >> k;
	fun(a, n, k);
}

  9. 推导大 O阶:

    用常数1代替运行时间中的所有加法常数。

    在修改后的运行次数函数中,只保留最高阶项。

    如果最高阶项存在且不是1,则去除与这个项相乘的常数。

  1. 答:凡是能被计算机存储、加工的对象统称为数据,数据是一个集合。数据元素是数据的基本单位,是数据的个体。数据元素与数据之间的关系是元素与集合之间的关系。
  2. 答:该逻辑结构为树形结构,其中 a 结点没有前驱结点,它是开始结点,bei g、 结点没有后继结点,它们都是终端结点。
  3. 答:在数据结构中,逻辑结构与计算机无关,存储结构是数据元素之间的逻辑关系在 计算机中的表示。存储结构不仅将逻辑结构中所有数据元素存储到计算机内存中,而且还 要在内存中存储各数据元素间的逻辑关系。通常情况下,一种逻辑结构可以有多种存储结 构,例如,线性结构可以采用顺序存储结构或链式存储结构表示。

  4. 答:运算描述是指逻辑结构施加的操作,而运算实现是指一个完成该运算功能的算法。 它们的相同点是,运算描述和运算实现都能完成对数据的“处理”或某种特定的操作。不同点是,运算描述只是描述处理功能,不包括处理步骤和方法,而运算实现的核心则是设 计处理步骤。

  5. 答:数据结构是相互之间存在一种或多种特定关系的数据元素的集合,一般包括三个 方面的内容,即数据的逻辑结构、存储结构和数据的运算。而数据类型是一个值的集合和 定义在这个值集上的一组运算的总称,如C语言中的short int数据类型是由-3276832767 (16位机)的整数和+、-、*/%等运算符构成。

  6. 答:在算法设计中,一个算法通常用一个或多个 C/C++函数来实现,在 C/C++函数之 间传递参数时有两种情况,一是从实参到形参的单向值传递,二是实参和形参之间的双向 值传递。对形参使用引用运算符,即在形参名前加上“&”,不仅可以实现实参和形参之间 的双向值传递,而且使算法设计简单明晰。

  7. 答:本算法的功能是计算y=x^n,可以理解为for(int i=n;i>1;i--)执行

  8. //#include<iostream>
    //using namespace std;
    //#define N 101
    //int a[N][N];
    int sum(int a[N][N],int n)
    {
    	int s = 0;
    	for (int i = 0; i < n; i++)
    		for (int j = 0; j < n; j++)
    			s += a[i][j];
    	return s;
    }本算法的时间复杂度为 O(n2)。
    //int main()
    //{
    //	int n;
    //	cin >> n;
    //	for (int i = 0; i < n; i++)
    //		for (int j = 0; j < n; j++)
    //			cin >> a[i][j];
    //	cout << sum(a,n);
    //}
    //#include<iostream>
    //using namespace std;
    void order(int a, int b, int c)
    {
    	if (a > b)
    	{
    		if (b > c)
    			cout << c << b << a;
    		else if (a > c)
    			cout << b << c << a;
    		else
    			cout << b << a << c;
    	}
    	else
    	{
    		if (b > c)
    		{
    			if (a > c)
    				cout << c << a << b;
    			else
    				cout << a << c << b;
    		}
    		else
    			cout << a << b << c;
    	}
    }时间复杂度为O(1)。
    //int main()
    //{
    //	int a, b, c;
    //	cin >> a >> b >> c;
    //	order(a, b, c);
    //}
    //#include<iostream>
    //using namespace std;
    //#define N 101
    void maxnmin(int a[N],int n)
    {
    	int max, min;
    	max = min = a[0];
    	for (int i = 0; i < n; i++)
    	{
    		max = max > a[i] ? max : a[i];
    		min = min < a[i] ? min : a[i];
    	}
    	cout << max << min;
    }时间复杂度为O(n)
    //int main()
    //{
    //	int a[N],n;
    //	cin >> n;
    //	for (int i = 0; i < n; i++)
    //		cin >> a[i];
    //	maxnmin(a,n);
    //}

f(n)去常数项1000,保留最高阶项100n^3,去100.为O(n^3) 

g(n)为O(n^3)

n→∞时, √n>log2n,所以h(n)=n ^l.5+5000nlog2n=O(n^1.5)

10.答:j=0,第 1 次循环:j=1,s=10。第 2 次循环:j=2,s=30。第 3 次循环:j=3,s=60。第 4 次循环:j=4,s=100。while 条件不再满足。所以,其中循环语句的执行次数为 4。

11(1)for(int i=1;i<n;i+=2)

      (2)列出两个求和的式子,分别取i为第一个式子端点,i为0时,第二个循环执行了n-1次,i为n-2时,第二个循环执行了0次,求和即可n*(a1+an)/2。

    (3)0+1+2+.....+x<=n,x=√n

12.(不会

 

13

 . 

 

如果想看上机实验题,自行购买上机指导!!!!!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一章 绪论作业答案(共50分) 一、分析如下程序中 (1)~ (10)各语句的频度。(每个1分,共10分) Ex( ) { int i , j , t ; (1) for( i=1 ; i<10 ; i++) //n = (2) printf(“\n %d” , i ); //n = (3) for(i=1; i<=2; i++) //n = (4) printf(“\n”); //n = (5) for(i=1; i<=9; i++) //n = { (6) for(j=1; j <= i ; j++) //n = { (7) t = i * j ; //n = (8) printf(“]”,t); //n = } (9) for(j=1; j 0) { if(x > 100) {x -= 10 ; y -- ;} else x ++ ; } 问if 语句执行了多少次?(2分) y--执行了多少次?(2分) x ++执行了多少次?(2分) 三、回答问题(共25分) 书中16页的起泡排序如下: void bubble_sort(int a[],int n){ //将a中整数序列重新排列成自小至大有序的整数序列。 for(i=n-1,change=TRUE;i>=1&&change;--i){ change=FALSE; for(j=0;ja[j+1]{a[j]<-->a[j+1];change=TRUE; } } }//bubble_sort 1.(共15分)分析该算法的最佳情况 ,最坏情况和平均情况下各自的时间复杂度(给出分析思路与过程)。 (1) 最佳情况的时间复杂度分析(5分): (2) 最坏情况的时间复杂度分析(5分): (3) 平均情况的时间复杂度分析(5分): 2.(共10分)比较与C语言书中的起泡排序异同,并从时空效率角度说明谁更优。 四、完成如下选择题(每3分,共9分)。 1. 设f为原操作,则如下算法的时间复杂度是( )。 for (i = 1; i*i=1;i--) for(j=1;jA[j+1]) A[j]与A[j+1]对换; 其中n为正整数,则算法在最坏情况下的时间复杂度为( )。 A.O(n) B.O(nlog2n) C. O(n3) D. O(n2)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值