数据结构——例题1

发布于:2025-05-18 ⋅ 阅读:(23) ⋅ 点赞:(0)

eg1:求解 S = 1! + 2! + 3! + ... + n!

#include<stdio.h>
#include<stdlib.h>

long sum(int n){
	long s = 0,t,i,j;
	for(i=1;i<=n;i++){
		t=1;
		for(j=1;j<=i;j++){
			t*=j;
		}
			s+=t;
	}
	return s;
}

int main(){
	int n;
	printf("请输入一个整数:");
	scanf("%d",&n);
	printf("%d",sum(n));
}

eg2:以下说法不正确的是__B__

A.数据元素是数据的基本单位

B.数据项可由若干个数据元素构成

C.数据项是不可分割的最小标识单位

D.数据可由若干个数据元素构成

eg3:在数据结构中,与所使用的计算机无关的是数据的__C__结构

A.逻辑和存储

B.物理

C.逻辑

D.存储

解析:在数据结构的分类中,数据的逻辑结构是指数据元素之间的相互关系及其组织方式,这种关系和组织方式是独立子具体计算机实现的。换句话说,逻辑结构关注的是数据本身的抽象关系,而不是这些数据在计算机中如何存储和实现。
选项A:存储结构,是数据在计算机内存中的具体表示方式,与计算机有关。
选项B:物理结构,指的是数据在计算机硬件上的具体存储形式,与计算机有关。
选项C:逻辑结构,是指数据元素之间的逻辑关系,与具体计算机实现无关。
选项D:物理和存储结构,都涉及到具体的计算机实现,与计算机有关。

eg4:取算法的时间复杂度为O(n3次方),当n=5时执行时间为50s,当n=15时,执行时间为__D__

A.675

B.2025

C.3375

D.1350

解析:T(n)=O(n的3次方)=m*n^3,当n=5 时T(n)=50s,求得m=0.4。当n=15 时,T(n)=m*n^3=0.4*15^3=1350s 。

eg5:下面程序的时间复杂度为__C__

void fun(int n) {int i = 1;while(i<=n) i=i*2}

A.O(nlog2n)

B.O(n)

C.O(log2n)

D.O(n^2)

解析:①列出循环趟数t以及每轮i的变化值

t 0 1 2 3 4 5
i 1 2 4 8 16 32

②找到i与t的关系:i=2^t

③确定停止条件:i<=n

④联立①②方程:2^t<=n  -->  t<=log2n

所以T=O(log2n)

eg6:下面程序的时间复杂度为__C__
int count=0;
for(k=1 ; k<=n ; k*=2)
   for(j=1;j<=n;j++)
      count++;

解析:①列出外层循环趟数t1,列出外层循环中k的变化值

t1 0 1 2 3 4 5
k 1 2 4 8 16 32

②找到k与t1的关系:k=2^t1

③由外层循环for(k=1 ; k<=n ; k*=2)可得:2^t1<=n,即t1=log2n,说明外层循环有log2n次

④列出内层语句的执行次数t2

t1 0 1 2 3 4 5
k 1 2 4 8 16 32
t2 1 2 3 4 5 6

⑤求内层语句的执行次数t2之和S

内层循环:对于外层循环的每一次迭代,内层循环都会完整的从j=1执行到j=n,即内层循环每次执行n次

总执行次数:由于外层循环执行log2n次,每次外层循环时内层循环执行n次,所以总的执行次数S=n*log2n

时间复杂度:根据大O表示法,该双层循环的时间复杂度为O(nlog2n)

eg7:以下函数中时间复杂度最小的是__D__

A.T1(n) = nlog2n + 5000n

B.T2(n) = n^log2n-6000n

C.T3(n) = n^2-8000n

D.T4(n) = 20000log2n

解析:


网站公告

今日签到

点亮在社区的每一天
去签到