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和N​N

B. N和2/N

C. N​2logN和NlogN​2

D. NlogN​2和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 = 0while(i<=n)
     i = i * 3

A. O(2n)

B. O(n)

C. O(n​2)

D. O(log​3n)

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(n​2)

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;
}

猜你喜欢

转载自blog.csdn.net/qq_46039856/article/details/109814045