数据结构复习题——填空题与程序填空题

这篇具有很好参考价值的文章主要介绍了数据结构复习题——填空题与程序填空题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

填空题

算法效率的比较

假设为解决某问题而设计的若干算法的时间复杂度分别为:

A) O(n)

B) O(n2)

C) O(log2n)

D) O(nlog2n)

E) O(2n)

F) O(√n)

G) O(n!)

H) O(1)

I) O(n√n)

J) O(n^n)

这些算法按效率由高到低的顺序是 HCFADIBEGJ


基本术语

算法 是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。


算法的量度

(1) 算法所需执行时间的量度称为 时间复杂度

(2) 算法所需存储空间的量度称为 空间复杂度


在长度为n的顺序表L中将所有值为x的元素替换成y,该算法的时间复杂度为 O(n)


顺序表 - 地址计算

假设顺序表第 1 个元素的内存地址是 100,每个元素占用 2 字节内存空间,则第 5 个元素的内存地址是108

程序填空题

测量算法的运行时间

下面的程序测量某个函数 F 的运行时间。

请在空白处填写适当内容,完成该程序。

#include <stdio.h>

#include < time.h >

int F(int x);

int main()

{

int x, y;

clock_t t1, t2;

double t;

scanf("%d", &x);

t1 = clock() ;

y = F(x);

t2 = clock() ;

t = (t2 - t1) / (double)CLOCKS_PER_SEC ;

printf("%d\n", y);

printf("It took %.2f second(s).\n", t);

return 0;

}

int F(int x)

{

...(略)...

}

输入样例

25

输出样例

3712
It took 0.18 second(s)

注:图中数据仅为样例,实际结果可能不同。


顺序表插入操作

#include<iostream>

using namespace std;

#define OK 1

#define ERROR 0

#define MAXSIZE 100

typedef int datatype;

typedef struct {

datatype *elem;

int length;

} SqList;

int ListInsert_Sq(SqList &L, int i, datatype e) {

if ((i < 1) || (i > L.length + 1))

return ERROR;

if (L.length == MAXSIZE)

return ERROR;

for (int j = L.length - 1; j >= i - 1; j--)

L.elem[j + 1] = L.elem[j]; //2分

L.elem[i - 1] = e; //2分

++L.length;

return OK;

}

int main() {

SqList L;

int i = 0, n,a;

datatype e;

L.elem = new datatype[MAXSIZE];

L.length = 0;

cin >> n;

for (i=0;i<n;i++)

cin >> L.elem[i];

L.length = i;

cin >> a >> e;

if (ListInsert_Sq(L, a, e))

{

for (i = 0; i < L.length; i++)

if(i==0)

cout << L.elem[i];

else

cout << " " << L.elem[i];

}文章来源地址https://www.toymoban.com/news/detail-768390.html

else

cout << "ERROR";

return 0;

}


顺序表删除操作

#include<iostream>

using namespace std;

#define OK 1

#define ERROR 0

#define MAXSIZE 100

typedef int datatype;

typedef struct {

datatype *elem;

int length;

} SqList;

int ListDelete_Sq(SqList &L, int i) {

if ((i < 1) || (i > L.length))

return ERROR;

for (int j = i; j <= L.length; j++)

L.elem[j-1] = L.elem[j];

--L.length;

return OK;

}

int main() {

SqList L;

int i = 0, n,a;

datatype e;

L.elem = new datatype[MAXSIZE];

L.length = 0;

cin >> n;

for (i=0;i<n;i++)

cin >> L.elem[i];

L.length = i;

cin >> a;

if (ListDelete_Sq(L, a))

{

for (i = 0; i < L.length; i++)

if(i==0)

cout << L.elem[i];

else

cout << " " << L.elem[i];

}

else

cout << "ERROR";

return 0;

}


单链表逆转

下列代码的功能是返回带头结点的单链表L的逆转链表。

List Reverse( List L )

{

Position Old_head, New_head, Temp;

New_head = NULL;

Old_head = L->Next;

while ( Old_head ) {

Temp = Old_head->Next;

Old_head->Next = New_head;

New_head = Old_head;

Old_head = Temp;

}

L->Next = New_head;

return L;

}


Prim

下列代码的功能是使用Prim算法求出无向图的最小生成树权值总和,请补全。

给出的图用邻接矩阵存储。若两顶点之间没有直接路径,则对应权值为 INF,且题目保证 INF 值足够大;若找不到距离最短的顶点或者无法求出权值总和,则返回 ERROR。

typedef int WeightType;
typedef int VertexType;
typedef struct {
    int Nv;
    WeightType G[MAX_GRAPH_SIZE][MAX_GRAPH_SIZE];
} GNode, * MGraph;

VertexType FindMinDist(MGraph Graph, WeightType dist[]) {
    VertexType MinV = -1, V;
    WeightType MinDist = INF;
    for (V = 0; V < Graph->Nv; V++) {
        if (dist[V] != 0 && dist[V] < MinDist 2分) {
            MinDist = dist[V];
            MinV = V; //2分
        }
    }
    if (MinDist < INF) {
        return MinV;
    } else {
        return ERROR;
    }
}

int Prim(MGraph Graph) {
    int dist[MAX_GRAPH_SIZE];
    int TotalWeight = 0, VCount = 0;
    VertexType  V, W;
    for (V = 0; V < Graph->Nv; V++) {
        dist[V] = Graph->G[0][V];
    }
    dist[0] = 0;
    VCount++;
    while (1) {
        VertexType MinV;
        if ((MinV = FindMinDist(Graph, dist)) == ERROR) {
            break;
        }
        TotalWeight += dist[MinV];
        dist[MinV] = 0; //2分
        VCount++;
        for (W = 0; W < Graph->Nv; W++) {
            if (dist[W] != 0 && dist[W] > Graph->G[MinV][W] 2分) {
                dist[W] = Graph->G[MinV][W];
            }
        }
    }
    if (VCount < Graph->Nv 2分) {
        return ERROR;
    } else {
        return TotalWeight;
    }
}

冒泡排序

本题要求用冒泡排序将一组整数按增序排序。冒泡排序每次从头到尾扫描待排序列,检查相邻两数的顺序,如果顺序不对就交换。请补全下列冒泡排序的代码。

typedef struct node *nodeptr;

struct node{

int value;

nodeptr next;

/* 一些其他的项,在此忽略 */

};

nodeptr BubbleSort (nodeptr h)

{/* h 是带空头结点的链表的头指针 */

nodeptr p, q;

int flag_swap;

if (!h->next) return h;

do{

flag_swap = 0;

p = h;

while (p->next->next){

if ( p->next->value > p->next->next->value 3 分 ){

flag_swap++;

q = p->next;

p->next = q->next 3 分;

q->next = p->next->next 3 分;

p->next->next = q 3 分;

}

else p = p->next;

}

} while (flag_swap > 0);

return h;

}


堆排序

下列代码的功能是利用堆排序将N个元素按非递减顺序排序。

#define leftchild(i) ( 2*(i)+1 )

void PercDown( ElementType A[], int i, int N )

{ int child;

ElementType Tmp;

for ( Tmp = A[i]; leftchild(i) < N; i = child ) {

child = leftchild(i);

if (child != N - 1 && A[child + 1] > A[child] 3 分)

child ++;

if (Tmp < A[child] 3 分) A[i] = A[child];

else break;

}

A[i] = Tmp 3 分;

}

void Heapsort( ElementType A[ ], int N )

{ int i;

for ( i = N / 2; i>= 0; i -- ) /* BuildHeap */

PercDown( A, i, N );

for ( i = N-1; i >0; i -- ) {

Swap( &A[ 0 ], &A[ i ] );

PercDown( A, 0, i ) 3 分;

}

}


希尔排序的分步结果

本题要求给出希尔排序对给定初始序列{9, 8, 7, 6, 5, 4, 3, 2, 1}利用增量序列{1, 3, 7}进行排序的分步结果。将每步结果填在下列空中。注意:相邻数字间必须有一个空格,开头结尾不得有多余空格。

原始序列

9 8 7 6 5 4 3 2 1

增量7排序后

2 1 7 6 5 4 3 9 8

1 分

增量3排序后

2 1 4 3 5 7 6 9 8

1 分

增量1排序后

1 2 3 4 5 6 7 8 9


初始化循环队列,判空队列

本题目要求Init_SeQueue()函数初始化循环队列,返回指向队列的指针,Empty_SeQueue(c_SeQueue *q)函数判空队列,空队列返回1。否则返回0。

#include <stdio.h>

#include <malloc.h>

#define MAXSIZE 1024

typedef int datatype;

typedef struct {

datatype data[MAXSIZE]; /*数据的存储区*/

int front,rear; /*队头队尾指针*/

int num; /*队中元素的个数*/

}c_SeQueue; /*循环队*/

c_SeQueue* Init_SeQueue()

{

c_SeQueue *q;

q=(c_SeQueue*)malloc(sizeof(c_SeQueue));

q->front=q->rear=MAXSIZE-1 3 分;

q->num=0;

return q;

}

int Empty_SeQueue(c_SeQueue *q)

{

if (q->num==0 3 分) return 1;

else return 0;

}


出循环队列

本题目要求Out_SeQueue (c_SeQueue *q , datatype *x)函数将 出循环队列的值送给变量x。出队成功返回1,否则返回-1。

#include <stdio.h>

#include <malloc.h>

#define MAXSIZE 1024

typedef int datatype;

typedef struct {

datatype data[MAXSIZE]; /*数据的存储区*/

int front,rear; /*队头队尾指针*/

int num; /*队中元素的个数*/

}c_SeQueue; /*循环队*/

int Out_SeQueue (c_SeQueue *q , datatype *x)

{

if (q->num==0)

{

printf("The c+SeQueue is empty");

return -1;

}

else

{

q->front=(q->front+1) % MAXSIZE 3 分;

*x=q->data[q->front];

q->num-- 3 分;

return 1;

}

}

到了这里,关于数据结构复习题——填空题与程序填空题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构复习题——选择题

    在数据结构中,从逻辑上可以把数据结构分成( )。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 与数据元素本身的形式、内容、相对位置、个数无关的是数据的( )。 A.存储结构 B.存储实现 C.逻辑结构 D.运算实现 通常要求

    2024年02月02日
    浏览(37)
  • 【考研复习】24王道数据结构课后习题代码|2.3线性表的链式表示

    删除结点:1、2、4 就地逆置:5、 合并链表 分解链表:10、11、 去除重复元素:12、 并集:14、15 循环链表:17、18、19、20 头插法、尾插法重点基础必掌握。 判断是否有环:21 用函数递归调用删除结点。 注意删除结点的时候可能断链。 利用函数调用的特性反向输出。 设置保

    2024年02月13日
    浏览(26)
  • 大数据基础复习题整理

    A. 物联网可以借助于大数据实现海量数据的分析 B. 物联网可以借助于云计算实现海量数据的存储 C. 云计算、大数据和物联网三者紧密相关,相辅相成 D. 云计算侧重于数据分析 正确答案:D A. 个人计算机 B. 物联网 C. 云计算 D. 大数据 正确答案:B,C,D。 第一次浪潮:个人计

    2024年01月21日
    浏览(40)
  • Python期末复习题:组合数据类型

    有10 名同学的python 课程成绩分别为:94, 89, 96, 88, 92, 86, 69, 95, 78,85。 要求利用列表分析成绩,输出平均值、最高的3个成绩和最低的3个成绩、成绩中位数(是按顺序排列的一组数据中居于中间位置的数,如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数)。

    2024年02月05日
    浏览(36)
  • 利用Python进行数据分析期末复习题

    一、选择题          二、填空题 三、判断题 四、代码分析题 五、程序题 1.sum(range(0,101)的结果是( ) A.5050      B.5151       C.0        D.101 A 2.下面哪个不是python合法的标识符() A.int32     B.70XL       C.self        D.__name__ B 3.’abcabcabc’.count(‘abc’)的值为() A.

    2024年02月04日
    浏览(48)
  • 阿里云大数据ACA及ACP复习题(121~140)

    121.数据清洗(Data Cleaning)是用于检测和纠正(或删除)记录集,表或数据库中的不准确或损坏的记录。下列选项中,对数据清洗描述正确的是(ABC) A:数据清洗可以检测表中的不准确或损坏的记录 B:数据清洗可以识别不正确,不完整,不相关,不准确或其他有问题(“脏”)的数据

    2024年01月18日
    浏览(30)
  • 数据库系统概述——第六章 关系数据理论(知识点复习+练习题)

    🌟 博主: 命运之光 🦄 专栏: 离散数学考前复习(知识点+题) 🍓 专栏: 概率论期末速成(一套卷) 🐳 专栏: 数字电路考前复习 🦚 专栏: 数据库系统概述 ☀️ 博主的其他文章: 点击进入博主的主页​​​​​ 前言: 身为大学生考前复习一定十分痛苦,你有没有过

    2024年02月09日
    浏览(38)
  • 数据库系统概述——第一章 绪论(知识点复习+练习题)

    ✨ 博主: 命运之光 🦄 专栏: 离散数学考前复习(知识点+题) 🍓 专栏: 概率论期末速成(一套卷) 🐳 专栏: 数字电路考前复习 🦚 专栏: 数据库系统概述 ✨ 博主的其他文章: 点击进入博主的主页​​​​​ 前言: 身为大学生考前复习一定十分痛苦,你有没有过以

    2024年02月09日
    浏览(41)
  • 《大数据技术原理与应用(第3版)》期末复习——前两章练习题

    第一章 大数据概述 1【单选题】 人类社会的数据产生方式大致经历了三个阶段, 不包括 : A、运营式系统阶段 B、用户原创内容阶段 C、互联网应用阶段 D、感知式系统阶段 答案:C 数据产生方式经历了三个阶段:运营式系统阶段、用户原创内容阶段、感知式系统阶段 2【单选

    2024年02月07日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包