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

//例1.5
#include
#include
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<> x >> x1 >> x2;
	solution(x, x1, x2);
}
//例1.9
#include
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
    //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
    //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
    //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

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

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

数据结构第一章绪论(例题+课后答案)_第1张图片

12.(不会

 数据结构第一章绪论(例题+课后答案)_第2张图片

13

 .数据结构第一章绪论(例题+课后答案)_第3张图片 

数据结构第一章绪论(例题+课后答案)_第4张图片

数据结构第一章绪论(例题+课后答案)_第5张图片

数据结构第一章绪论(例题+课后答案)_第6张图片

 数据结构第一章绪论(例题+课后答案)_第7张图片

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

你可能感兴趣的:(数据结构(李春葆))