pta 数据结构 线性表习题
判断题
1-1 对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度分别对应为O(1)和O(N)。
- T
- F
1-2 若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用顺序表存储最节省时间。
- T
- F
1-3 对于顺序存储的长度为N的线性表,删除第一个元素和插入最后一个元素的时间复杂度分别对应为O(1)和O(N)。
-
T
-
F
1-4 若用链表来表示一个线性表,则表中元素的地址一定是连续的。
-
T
-
F
选择题
2-1 在N个结点的顺序表中,算法的时间复杂度为O(1)的操作是:
A. 访问第i个结点(1≤i≤N)和求第i个结点的直接前驱(2≤i≤N)
B. 在第i个结点后插入一个新结点(1≤i≤N)
C. 删除第i个结点(1≤i≤N)
D. 将N个结点从小到大排序
2-2 对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度为:
A. O(1), O(1)
B. O(1), O(N)
C. O(N), O(1)
D. O(N), O(N)
2-3 若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用哪种存储方式最节省时间?
A. 双链表
B. 单循环链表
C. 带头结点的双循环链表
D. 顺序表
2-4 顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )。
A. 100
B. 105
C. 108
D. 110
2-5 下列函数中,哪两个函数具有相同的增长速度:
A. 2N和NN
B. N和2/N
C. N2logN和NlogN2
D. NlogN2和NlogN
2-6 算法的时间复杂度取决于( )。
A. 问题的规模
B. 待处理数据的初态
C. 计算机的配置
D. A和B
2-7 已知两个长度分别为m和n的升序链表,若将它们合并为一个长度为m+n的降序链表,则最坏情况下的时间复杂度是( )。
A. O(n)
B. O(mn)
C. O(min(m,n))
D. O(max(m,n))
2-8 下列代码的时间复杂度是:
for(i=0; i<N; i++)
for(j=0; j<N; j+=1000)
printf("%d,%d\n", i, j);
A. O(N×j)
B. O(N)
C. O(N2)
D. O(NlogN)
2-9 下面程序段的时间复杂度是 ( )
i = 0;
while(i<=n)
i = i * 3;
A. O(2n)
B. O(n)
C. O(n2)
D. O(log3n)
2-10 程序段
FOR i:=n-1 DOWNTO 1 DO
FOR j:=1 TO i DO
IF A[j]>A[j+1]
THEN A[j]与A[j+1]对换;
其中 n为正整数,则最后一行的语句频度在最坏情况下是( )
A. O(n)
B. O(nlogn)
C. O(n3)
D.O(n2)
2-11 下列叙述中正确的是
A. 程序执行的效率与数据的存储结构密切相关
B. 程序执行的效率只取决于程序的控制结构
C. 程序执行的效率只取决于所处理的数据量
D. 以上说法均错误
函数题
6-2 多项式求值
本题要求实现一个函数,计算阶数为n,系数为a[0] … a[n]的多项式f(x)=∑ ni=0(a[i] × xi) 在x点的值。
函数接口定义:
double f( int n, double a[], double x );
其中n是多项式的阶数,a[]中存储系数,x是给定点。函数须返回多项式f(x)的值。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 10
double f( int n, double a[], double x );
int main()
{
int n, i;
double a[MAXN], x;
scanf("%d %lf", &n, &x);
for ( i=0; i<=n; i++ )
scanf(“%lf”, &a[i]);
printf("%.1f\n", f(n, a, x));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
2 1.1
1 2.5 -38.7
输出样例:
-43.1
代码:
double f( int n, double a[], double x ){
double ans;
for (int i = 0; i <= n; ++i) {
ans+=a[i]*pow(x,i);
}
return ans;
}
**6-3 使用函数判断完全平方数 **
本题要求实现一个判断整数是否为完全平方数的简单函数。
函数接口定义:
int IsSquare( int n );
其中n是用户传入的参数,在长整型范围内。如果n是完全平方数,则函数IsSquare必须返回1,否则返回0。
裁判测试程序样例:
#include <stdio.h>
#include <math.h>
int IsSquare( int n );
int main()
{
int n;
scanf("%d", &n);
if ( IsSquare(n) ) printf("YES\n");
else printf("NO\n");
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
10
输出样例1:
NO
输入样例2:
100
输出样例2:
YES
代码
int IsSquare( int n )
{
int h =pow(n,0.5);
if(pow(h,2)==n)return 1;
return 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!