电子科大信软互+班 程算II 2021春机考真题

这篇文章包含了一系列编程题目,涉及数据结构的基础操作,如队列的初始化、入队、出队,二叉树的先序遍历,图的邻接矩阵操作,顺序表的合并以及关键路径和树遍历问题。每个题目都提供了详细的输入输出要求和相关函数接口定义。
摘要由CSDN通过智能技术生成

基本情况

对应课程:程序设计与算法基础II(数据结构与算法基础)

考试时间:3小时(2021-6-28)

题型:函数题

考试年级:2020级


队列

题目编号:113

循环链表表示队列

假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),请完成下列任务:

1: 队列初始化,成功返回真,否则返回假: bool init_queue(LinkQueue *LQ);

2: 入队列,成功返回真,否则返回假: bool enter_queue(LinkQueue *LQ, ElemType x);

3: 出队列,成功返回真,且*x为出队的值,否则返回假 bool leave_queue(LinkQueue *LQ, ElemType *x);

相关定义如下:

typedef struct _QueueNode {
    ElemType data;          // 数据域
    struct _QueueNode *next;      // 指针域
}LinkQueueNode, *LinkQueue;

请在下方编写代码

#include <stdio.h>
#include <stdlib.h>
#include "list.h" // 请不要删除,否则检查不通过

bool init_queue(LinkQueue *LQ)
{
	
}

bool enter_queue(LinkQueue *LQ, ElemType x)
{
	
}

bool leave_queue(LinkQueue *LQ, ElemType *x)
{
	
}

先序遍历

题目编号:120

已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法:

void pre_order(BiTree root);

在遍历过程中,pre_order函数需要调用 visit_node 函数来实现对结点的访问,该函数声明如下:

void visit_node(BiTNode *node);

二叉树的相关定义如下:

typedef int DataType;

typedef struct Node{
    DataType data;
    struct Node* left;
    struct Node* right;
}BiTNode, *BiTree;

遍历所使用栈的相关操作如下:

#define Stack_Size 50
typedef BiTNode* ElemType;
typedef struct{
    ElemType elem[Stack_Size];
    int top;
}Stack;

void init_stack(Stack *S); // 初始化栈
bool push(Stack* S, ElemType x); //x 入栈
bool pop(Stack* S, ElemType *px); //出栈,元素保存到px所指的单元,函数返回true,栈为空时返回 false
bool top(Stack* S, ElemType *px); //获取栈顶元素,将其保存到px所指的单元,函数返回true,栈满时返回 false
bool is_empty(Stack* S);  // 栈为空时返回 true,否则返回 false

请在下方编写代码

#include <stdlib.h>
#include <stdio.h>
#include "bitree.h" //请不要删除,否则检查不通过

void pre_order(BiTree root){


}

邻接矩阵

题目编号:127

试在邻接矩阵存储结构上实现图的基本操作 matrix_insert_vertex 和matrix_insert_arc,相关定义如下:

typedef int VertexType;

typedef enum{
    DG, UDG
}GraphType;

typedef struct{
    VertexType vertex[MAX_VERTEX_NUM]; //顶点向量
    int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵
    int vexnum, arcnum;   //图的当前顶点数和弧数
    GraphType type;     //图的种类标志
}MatrixGraph;

int matrix_locate_vertex(MatrixGraph *MG, VertexType vex); //返回顶点 v 在vertex数组中的下标,如果v不存在,返回-1
bool matrix_insert_vertex(MatrixGraph *G, VertexType v);
bool matrix_insert_arc(MatrixGraph *G, VertexType v, VertexType w);

当成功插入顶点或边时,函数返回true,否则(如顶点或边已存在、插入边时顶点v或w不存在)返回false。

请在下方编写代码

#include <stdio.h>
#include "graph.h" // 请不要删除,否则检查不通过

bool matrix_insert_vertex(MatrixGraph *G, VertexType v){


}

bool matrix_insert_arc(MatrixGraph *G, VertexType v, VertexType w){


}

顺序表合并

题目编号:160

顺序表相关定义及辅助函数如下:

// 宏定义
#define MAXSIZE 100
#define OK 1
#define ERROR 0

typedef struct{
  int elem[MAXSIZE];
  int last;
}SeqList;

// 根据格式控制符号串format输出一个整数num,格式控制符号串与printf兼容
void print_num(char* format, int num);

// 根据格式控制符号串format读入一个整数num,格式控制符号串与scanf兼容
void read_num(char* format, int* pnum);

请按要求实现非递减顺序表合并的相关函数

// 函数声明
void initList(SeqList *L);       
void printList(SeqList *L);        
void inputData(SeqList *L);    
void merge(SeqList *LA, SeqList *LB, SeqList *LC);

其中,

  • initList函数初始化L的last域为-1;
  • printList函数调用print_num实现在屏幕上显示顺序表L的元素值;
  • inputData函数调用read_num实现顺序表L的初始化,当读到的数为 STOP 时停止读取数据;
    (要求:printList必须调用print_num函数,inputData必须调用调用read_num,否则检查不通过);
  • merge函数合并非递减顺序表LA和LB,结果放入非递减顺序表LC中,示例如下:

La=(1 3 5 7 9 11 )
Lb=(2 4 6 8 10 )
Lc(La+Lb)=(1 2 3 4 5 6 7 8 9 10 11 )

请在下方编写代码

#include <stdio.h>
#include "seqlist.h"

void initList(SeqList *L){

}       
void printList(SeqList *L){

}
       
void inputData(SeqList *L){

}
   
void merge(SeqList *LA, SeqList *LB, SeqList *LC){

}

关键路径

题目编号:161

已知有6 个顶点(顶点编号为 0~5)的带权有向图G,其邻接矩阵数组A 如下:

int a[6][6] ={
         {∞, 4, 6, ∞, ∞, ∞},
         {∞, ∞, 5, ∞, ∞, ∞},
         {∞, ∞, ∞, 4, 3, ∞},
         {∞, ∞, ∞, ∞, ∞, 3},
         {∞, ∞, ∞, ∞, ∞, 3},
         {∞, ∞, ∞, ∞, ∞, ∞}
}

实现函数

int check_key_path(int* path);

函数将图G的关键路径顶点编号保存到path数组中,返回该关键路径的长度。(只需将结果存入,无需实现关键路径寻找等算法)

请在下方编写代码


int check_key_path(int* path){

}

树遍历

题目编号:162

设关键字的输入顺序为:36,53,28,68,9,33,实现函数

void check_tree_level_visit(int keys[]);

对于所生成的二叉排序树,按层次遍历方式访问,将访问所得的关键字按顺序保存至keys数组中。(只需将结果存入,无需实现遍历等函数)


void check_tree_level_visit(int keys[]){

}

线性哈希

题目编号:163

已知一组关键字(19,14,23,1,68,20,13,18,55,24,35,21,51),哈希函数为:H(key)=key%13,用线性探测法处理冲突;请实现函数

void check_hash_array(int array[]);


声明

本文章仅供学习使用。严禁作其他用途。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谨慎谦虚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值