数据结构 习题1

简介: 数据结构 习题1

判断题

1-1 数据结构包括数据的逻辑结构、存储结构和运算集合这三部分。

       正确

1-2 算法的五大特性为:有限性、确定性、输入、输出、可行性。

       正确

1-3 数据的基本逻辑结构为集合结构、线性结构、树形结构、图状结构

       正确

单选题

2-1 数据结构可以从逻辑上分成 (C) 两大类。

A.动态结构和静态结构

B.紧凑结构和非紧凑结构

C.线性结构和非线性结构

D.内部结构和外部结构

2.2 数据逻辑结构可以分为( B )。

A.线性结构和图结构

B.集合结构、线性结构、树结构和图结构

C.顺序结构和链式结构

D.集合结构和非线性结构

2-3 算法分析的两个主要方面是( A )。

A.空间复杂度和时间复杂度

B.正确性和简明性

C.可读性和文档性

D.数据复杂性和程序复杂性

2-4  算法设计的要求

设计一个好的算法应该满足正确性、(B)、健壮性和高效性等要求。

A.稳定性        B.可读性        C.可靠性        D.可行性

2-5  算法的特性

一个算法必须满足有穷性、确定性、 ( C )  、输入和输出等五个重要特性。

A.高效性        B.稳定性        C.可行性        D.可读性

2-6 执行下面程序段时,执行S语句的频度为( D )。

for(int i=0;i<n;i++)
for(int j=1;j<=i;j++)
     S;

A.n^2        B.n^2/2        C.n(n+1)        D.n(n+1)/2

2-7 下列程序段的时间复杂度为( B )。

x = n;     /*n > 1*/
y = 0;
while(x >= (y + 1) * (y + 1))
     y = y + 1;

A.Θ(n)        B.Θ(n½)        C.Θ(1)        D.Θ(n2)

2-8  时间复杂度分析

下面算法的时间复杂度为( D )。

int foo(int n)
{
    int i, s = 0;
    for (i = 1; i * i <= n; ++i)
    {
        s += i;
    }
    return s;
}

A.O(n2)        B.O(n)        C.O(n)        D.O(log2n)

2-9  时间复杂度分析

下面算法的时间复杂度为 ( D )。

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

A.O(n倍根号n)        B.O(n)        C.O(nlog2n)        D.O(n^2)

2-10 时间复杂度分析 下面算法的时间复杂度为( B )。

int foo(int n)
{
    int i, m = n / 2, s = 0;
    for (i = 1; i <= m; ++i)
    {
        s += i;
    }
    return s;
}

A.O(log2n)        B.O(n)        C.O(根号n)        D.O(n^2)

2-11 时间复杂度分析

下面算法的时间复杂度为 ( A )。

int foo(int n)
{
    int i, s = 0;
    for (i = 1; i <= n; ++i)
    {
        s += i;
    }
    return s;
}

A.O(n)        B.O(根号n)        C.O(log2n)        D.O(n^2)

2-12 时间复杂度分析

下面算法的时间复杂度为 ( D )。

int foo(int n)
{
    return n * (n + 1) / 2;
}

A.O(n)        B.O(n2)        C.O(根号n)        D.O(1)

2-13 设n为正整数,请估算下列程序段的时间复杂度为( C )

i=1; k=0;
while(i<=n-1)
{  k=k+10*i;
   i++;
}

A.O(1)        B.O(logn)        C.O(n)        D.O(n3)

2-14 设n为正整数,请估算下列程序段的时间复杂度为( B )

i=1; j=0;
while(i+j<=n)
{  if(i>j) j++
   else i++;
}

A.O(1)        B.O(n)        C.O(n^2)        D.O(n3)

2-15 设n为正整数,请估算下列程序段的时间复杂度为( D )

x=n; y=0; /* n>1 */
while(x>=(y+1)*(y+1))
  y++;

A.O(1)        B.O(n)        C.O(logn)        D.O(根号n)

2-16 设n为正整数,请估算下列程序段的时间复杂度为( A )

x=91; y=100;
while(y>0)
{ if(x>100)
  { x=x-10;
    y--;
  }
  else x++;
}

A.O(1)        B.O(n)        C.O(logn)        D.O(n2)

执行次数为常数项,时间复杂度用O(1)表示


三、函数题


1. 数组中按值找元素

在数组A[1..N]中查找值为k的元素,若找到输出其位置i(1<=i<=n),否则输出0作为标志。


函数接口定义:

Search(int a[],int n,int k);


其中 ank 都是用户传入的参数。a 为数组名,期中存了n个整数,下标为1到nk 为待查数据元素;若找到了,返回其下标;否则,返回0。

#include <stdio.h>
int Search(int a[50],int n,int k)
{
    int i;
    for(i=1;i<=n;i++)
    {
        if(a[i]==k)
        {
            return i;
        }
    }
    return 0;
}


2.找最大值和次大值

找出数组A[1..N]中最大值和次大值。(数组中元素个数大于两个且值各不相同)


函数接口定义:

void FindMax(int a[],int n,int *pmax1,int *pmax2);


其中 an 是用户传入的参数。 a为数组名, n为数组中元素的个数,在下标从1到n处存放。利用指针变量 pmax1pmax2带出运算结果。 pmax1为指向最大值的指针;pmax2为指向次大值的指针。

void FindMax(int a[],int n,int *pmax1,int *pmax2){
    for(int i = 1;i<n;i++){
        for(int j = i+1;j<=n;j++){
            if(a[i]<a[j]){
                int t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
    }
    *pmax1 = a[1];
    *pmax2 = a[2];
}


在数组中有序排序从大到小,存储在数组中,则数组中第一个元素为最大值,第二个元素为最小值


目录
相关文章
|
1月前
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
142 77
|
1月前
|
存储 人工智能 算法
【C++数据结构——图】最短路径(头歌教学实验平台习题) 【合集】
任务描述 本关任务:编写一个程序,利用Dijkstra算法,实现带权有向图的最短路径。 相关知识 为了完成本关任务,你需要掌握:Dijkst本关任务:编写一个程序,利用Dijkstra算法,实现带权有向图的最短路径。为了完成本关任务,你需要掌握:Dijkstra算法。带权有向图:该图对应的二维数组如下所示:Dijkstra算法:Dijkstra算法是指给定一个带权有向图G与源点v,求从v到G中其他顶点的最短路径。Dijkstra算法的具体步骤如下:(1)初始时,S只包含源点,即S={v},v的距离为0。
61 15
|
1月前
|
C++
【C++数据结构——树】二叉树的性质(头歌实践教学平台习题)【合集】
本文档介绍了如何根据二叉树的括号表示串创建二叉树,并计算其结点个数、叶子结点个数、某结点的层次和二叉树的宽度。主要内容包括: 1. **定义二叉树节点结构体**:定义了包含节点值、左子节点指针和右子节点指针的结构体。 2. **实现构建二叉树的函数**:通过解析括号表示串,递归地构建二叉树的各个节点及其子树。 3. **使用示例**:展示了如何调用 `buildTree` 函数构建二叉树并进行简单验证。 4. **计算二叉树属性**: - 计算二叉树节点个数。 - 计算二叉树叶子节点个数。 - 计算某节点的层次。 - 计算二叉树的宽度。 最后,提供了测试说明及通关代
46 10
|
1月前
|
存储 C++
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
【数据结构——树】哈夫曼树(头歌实践教学平台习题)【合集】目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果:任务描述 本关任务:编写一个程序构建哈夫曼树和生成哈夫曼编码。 相关知识 为了完成本关任务,你需要掌握: 1.如何构建哈夫曼树, 2.如何生成哈夫曼编码。 测试说明 平台会对你编写的代码进行测试: 测试输入: 1192677541518462450242195190181174157138124123 (用户分别输入所列单词的频度) 预
61 14
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
|
1月前
|
Java C++
【C++数据结构——树】二叉树的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现二叉树的基本运算。​ 相关知识 创建二叉树 销毁二叉树 查找结点 求二叉树的高度 输出二叉树 //二叉树节点结构体定义 structTreeNode{ intval; TreeNode*left; TreeNode*right; TreeNode(intx):val(x),left(NULL),right(NULL){} }; 创建二叉树 //创建二叉树函数(简单示例,手动构建) TreeNode*create
48 12
|
1月前
|
算法 C++
【C++数据结构——图】最小生成树(头歌实践教学平台习题) 【合集】
【数据结构——图】最小生成树(头歌实践教学平台习题)目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果:【合集】任务描述 本关任务:编写一个程序求图的最小生成树。相关知识 为了完成本关任务,你需要掌握:1.建立邻接矩阵,2.Prim算法。建立邻接矩阵 上述带权无向图对应的二维数组,根据它建立邻接矩阵,如图1建立下列邻接矩阵。注意:INF表示无穷大,表示整数:32767 intA[MAXV][MAXV];Prim算法 普里姆(Prim)算法是一种构造性算法,从候选边中挑
44 10
|
1月前
|
存储 算法 C++
【C++数据结构——图】图的邻接矩阵和邻接表的存储(头歌实践教学平台习题)【合集】
本任务要求编写程序实现图的邻接矩阵和邻接表的存储。需掌握带权有向图、图的邻接矩阵及邻接表的概念。邻接矩阵用于表示顶点间的连接关系,邻接表则通过链表结构存储图信息。测试输入为图的顶点数、边数及邻接矩阵,预期输出为Prim算法求解结果。通关代码提供了完整的C++实现,包括输入、构建和打印邻接矩阵与邻接表的功能。
49 10
|
1月前
|
C++
【C++数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】
【数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】(1)遇到左括号:进栈Push()(2)遇到右括号:若栈顶元素为左括号,则出栈Pop();否则返回false。(3)当遍历表达式结束,且栈为空时,则返回true,否则返回false。本关任务:编写一个程序利用栈判断左、右圆括号是否配对。为了完成本关任务,你需要掌握:栈对括号的处理。(1)遇到左括号:进栈Push()开始你的任务吧,祝你成功!测试输入:(()))
38 7
|
1月前
|
存储 C++ 索引
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】初始化队列、销毁队列、判断队列是否为空、进队列、出队列等。本关任务:编写一个程序实现环形队列的基本运算。(6)出队列序列:yzopq2*(5)依次进队列元素:opq2*(6)出队列序列:bcdef。(2)依次进队列元素:abc。(5)依次进队列元素:def。(2)依次进队列元素:xyz。开始你的任务吧,祝你成功!(4)出队一个元素a。(4)出队一个元素x。
44 13
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
|
1月前
|
算法 C++
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
【数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】 目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现二叉排序树的基本算法。 相关知识 为了完成本关任务,你需要掌握:二叉树的创建、查找和删除算法。具体如下: (1)由关键字序列(4,9,0,1,8,6,3,5,2,7)创建一棵二叉排序树bt并以括号表示法输出。 (2)判断bt是否为一棵二叉排序树。 (3)采用递归方法查找关键字为6的结点,并输出其查找路径。 (4)分别删除bt中关键
53 11
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】

热门文章

最新文章