自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】

文章目录

  • 2020年4月
    • 应用题
    • 算法设计题
  • 2020年10月
    • 应用题
    • 算法设计题
  • 2021年4月
    • 应用题
    • 算法设计题
  • 2021年10月
    • 应用题
    • 算法设计题
  • 标记位,上述的皆已有答案!!!!!!!!!!
  • 2022年4月
    • 应用题
    • 算法设计题
  • 2022年10月
    • 应用题
    • 算法设计题

2020年4月

应用题

  1. 有二叉树如题29图所示,写出该二叉树的先序遍历、中序遍历和后序遍历序列。
    自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第1张图片
    自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第2张图片

  2. 如题30图所示的图结构,请写出以10为源点的广度优先搜索得到的顶点访问序列,并画出搜索过程图。(同等情况下,值小的结点优先访问)
    自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第3张图片
    自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第4张图片

  3. 设散列表的长度为11,散列丽数h(key)=key mod 11,采用线性探查法解决冲突。从空表开始,依次插人下列关键字值序列:80,40,7,18,13,2,请建立散列表。
    自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第5张图片

  4. 依次输人键值序列:30,10, 20,50,40,60,构建二叉排序树,要求给出构建过程。

https://www.bilibili.com/video/BV1Tk4y117fs?from=search&;seid=15419245847752740376&spm_id_from=333.337.0.0
(博主的答案,没找到自考办给的官方答案,如果有小伙伴找到了辛苦下方评论留下地址)
自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第6张图片

  1. 对序列(45,38,66 ,90,88,10,25,45)进行冒泡排序,写出前三趟排序结果。
    自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第7张图片

算法设计题

  1. 试写出二分查找的非递归算法。
int SearchBin(SqTable T, KeyType key) {
	/**
	* 在有序表T中,用二分查找键值等于key的元素
	* 变量low、high分别标记查找区的下界和上界
	*/
	int low, high;
	low = 1;
	high = T.n;
	// low和high的区间长度不为0时继续查找
	while (low <= high) {
		// low+high本应该还要进行一个向下取整的,但是自考办给的答案忽略了那我们也忽略floor。
		mid = (low + high) / 2; // 对区间进行折半
		if (key == T.elem[mid].key) {
			return mid;
		} else if (key < T.elem[mid].key) {
			high = mid - 1; // 在前半区间查找
		} else {
			low = mid + 1; // 在后半区查找
		}
	}
	return 0;
}
  1. 已知丽数swap(R[min],R[i])功能是将记录R[min]和R[i]交换。试写出直接选择排序算法。
void SelectSort(List R,int n) {
	int min, i, j;
	// 每次循环,选出一个最小值
	for (i = 1; i <= n-1; i++) {
		min = i; // 假设第i个记录值最小
		for (j = i+1; j <= n; j++) {
			if (R[j].key < R[min].key) {
				min = j; // 记录下键值较小记录的下标
			}
			if (min != i) {
				swap(R[min], R[i]); // 将最小键值记录和交换第i个记录交换
			}
		}
	}
}

2020年10月

应用题

1.题29图给出了一个稀疏矩阵A,请写出该稀疏矩阵的三元组表。
自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第8张图片

答:
((0,1,5),(2,1,-1),(2,3,7),(3,1,6),(4,4,9),(5,5,8))


2.已知二叉树如题30图所示,请将该二叉树转换为对应的森林。
自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第9张图片
答:
自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第10张图片


3.设某通信系统中一个待传输的文本有6个不同字符,它们的出现频率分别是0.5、0.7、1.4、2.2、2.4、2.8。试画出哈夫曼树,并给出每个字符的哈夫曼编码。(要求任一结点的左孩子权值小于右孩子)

答:

出现频率为0.5的字符编码为1000
出现频率为0.7的字符编码为1001
出现频率为1.4的字符编码为101
出现频率为2.2的字符编码为00
出现频率为2.4的字符编码为01
出现频率为2.8的字符编码为11


4.选定散列函数为H(key) = key mod 13,实用链地址法建立值为 26,41,25,05,07,15,12,49,51,31,62 的散列表。

答:


5.对于给定的一组键值:83,40,63,13,84,35,96,57,39,79,61,15,请分别写出直接选择排序和冒泡排序的第一趟排序结果。

答:
直接选择排序:13,40,63,83,84,35,96,57,39,79,61,15
冒泡排序:40,63,13,83,35,84,57,39,79,61,15,96


算法设计题

1.写出一个将线性表的顺序表存储方式(数组a,表长为n)改成单链表存储方式(其头结点由头指针head指向)的算法。设函数头为:Node * CreateLinkedList(DataType a[], int n)

答:

Node * CreateLinkedList(DataType a[], int n) {
	head = (Node *)malloc(sizeof(Node)); // (1分)
	head -> next = NULL; // (1分)
	for (i = n; i > 0; i--) { // (1分)
		p = (Node *)malloc(sizeof(Node));
		p -> data = a[i - 1];
		p -> next = head -> next;
		head -> next = p;  // 整个for循环内容(3分)
	}
	return head; // (1分)
}

2.以二叉链表作存储结构,请写出二叉链表类型定义;利用二叉树遍历的递归算法,试编写求二叉树高度的算法。

答:

// 二叉链表类型定义如下:
typedef struct btnode {
	DataType data;
	struct btnode *lchild, *rchild;
} * BinTree;  // (2分)

// 求二叉树的高度的算法如下:
int Height(BinTree bt) {
	int lh, rh; // (1分)
	if (bt == NULL) return 0; // (1分)
	lh = Height(bt -> lchild); // (1分)
	rh = Height(bt -> rchild); // (1分)
	return 1 + (lh > rh ? lh : rh); // (1分)
}

2021年4月

应用题

1.设一个链栈的输入序列为A、B、C,请问共有几种可能的输出序列?试写出所得到的所有可能的输出序列。

答:
共有5种可能的输出序列 (1分)
它们分别是:ABC、BCA、BAC、CBA、ACB【每答出一个1分】


2.假设一棵二叉树的中序序列与后序序列分别为:B A C D E F G H 和 B C A E D G H F,请画出该二叉树。

答:
自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第11张图片


3.用Kruskal方法求题31图所示的图的最小生成树。(要求给出求解过程)
自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第12张图片
答:
自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第13张图片


4.根据二叉排序树的插入算法,从空树开始建立键值序列{ 50,48,24,55,53,90 }的二叉排序树,要求给出建立过程

(博主的答案,没找到自考办给的官方答案,如果有小伙伴找到了辛苦下方评论留下地址)
自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第14张图片


5.对于给定的一组键值:25,11,22,34,5,44,76,61,100,3,14,120,请分别写出直接插入排序和冒泡排序的第一趟排序结果。

(博主的答案,没找到自考办给的官方答案,如果有小伙伴找到了辛苦下方评论留下地址)
直接插入排序:11,25,22,34,5,44,76,61,100,3,14,120
冒泡排序:11,22,25,5,34,44,61,76,3,14,100,120


算法设计题

1.在单链表存储结构中,线性表的表长等于单链表中数据元素的结点个数,即除了头结点以外的结点的个数。通常通过头指针head来访问一个单链表。已知单链表结构如下:

typedef struct node {
	DataType data;
	struct node * next;
} Node, * LinkList;

设计求表长的算法,要求算法返回表长。

(博主的答案,没找到自考办给的官方答案,如果有小伙伴找到了辛苦下方评论留下地址)

int count(LinkList head) {
  LinkList p = head -> next;
  int n = 0;
  while (p != NULL) {
    m++;
    p = p -> next;
  }
  return n;
}

2.以二叉链表作存储结构,请设计算法求二叉树的结点的个数。

(博主的答案,没找到自考办给的官方答案,如果有小伙伴找到了辛苦下方评论留下地址)

// 二叉链表的结构类型定义
typedef struct btnode {
  DataType data;
  struct btnode *lchild, *rchild; // 指向左右孩子的指针
} *BinTree;

// 获取二叉树结点个数的算法


2021年10月

应用题

1.设有编号为1,2,3,4的四辆列车,顺序进入一个栈式结构的站台,若列车2最先开出,则列车出站可能的顺序有几种?并写出这四辆列车所有可能的出站顺序。

(博主的答案,没找到自考办给的官方答案,如果有小伙伴找到了辛苦下方评论留下地址)
若列车2最先开出站,则列车出站可能的顺序有五种。
分别是:
2134
2143
2314
2341
2431


2.将题30图所示的森林转换成二叉树。
自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第15张图片

答:
自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第16张图片


3.写出题31图所示的有向带权图的邻接矩阵。
自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第17张图片

答:
自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第18张图片


4.已知题32图所示的二叉排序树中各结点的值分别为1~9,请写出图中结点A~I所对应的值
自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第19张图片

答:
A:5
B:1
C:9
D:4
E:6
F:2
G:7
H:3
I:8


5.已知键值序列 { 11,2,13,26,5,18,4,9 },设散列表表长为13,散列函数H(key) = key mod 13,处理冲突的方法为线性探测法,请给出散列表。

答:
自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第20张图片


算法设计题

1.读入 n = 100个整数到一个数组中,写出实现将该组数进行逆置的算法,并分析算法的空间复杂度。

(博主的答案,没找到自考办给的官方答案,如果有小伙伴找到了辛苦下方评论留下地址)

void reverseArr(int a[], int n) {
  int i, temp;
  for (i = 0; i <= n / 2 - 1; i++) {
    temp = a[i];
    a[i] = a[n - 1 - i];
    a[n - 1 - i] = temp;
  }
}

reverseArr算法所需要的辅助变量为2个整型变量 i 和 temp,与问题的规模无关,其空间复杂度为 O(1)。


2.试写出二分查找的递归算法。

(博主的答案,没找到自考办给的官方答案,如果有小伙伴找到了辛苦下方评论留下地址)

int binsearch_2(Sqtable R, KeyType k, int low, int high) {
  int mid = (low + high) / 2;
  if (R.elem[mid].key == k) {
    return mid;
  } else if (R.elem[mid].key > k) {
    return binsearch_2(R, k, low, mid - 1);
  } else {
    return binsearch_2(R, k, mid + 1, high);
  }
}

标记位,上述的皆已有答案!!!!!!!!!!

2022年4月

应用题

1.二叉树的五种基本形态如题29图所示。
问1:子树用什么形状表示?
问2:分别写出题29-1图、题29-2图和题29-5图的形态
自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第21张图片
答:


2.给定无向图如题30图所示。
问1:计算D(v1)和D(v2)
问2:写出以顶点v0为起点到v3的所有简单路径。
自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第22张图片
答:


3.给定一组键值 { 45,38,66,90,88,10,25,45 } ,假设在排序过程中,前4个记录已按键值递增顺序重新排列,构成了一个有序序列为 { 38, 45, 66, 90 }。
问1:请写出应用直接插入排序方法对剩余键值排序的排序过程。
问2:直接插入排序方法是否稳定?

答:


4.设有m个顶点的无向图G,采用邻接矩阵作存储结构,在邻接矩阵上判断下列有关问题,给出简单的算法描述。
问1:图中有多少条边?
问2:任意俩个顶点i和j是否有边相连?
问3:任意一个顶点的度是多少?

答:


5.已知散列函数为H(key) = key mod 7,构造散列表如题33表,并用线性探测法解决冲突。若要用该散列表查找元素 25,32,68,请分别给出所需的比较次数。
在这里插入图片描述

答:


算法设计题

1.写出实现对一个n * n阶矩阵进行转置的算法。

(博主的答案,没找到自考办给的官方答案,如果有小伙伴找到了辛苦下方评论留下地址)

void MM(int A[n][n]) {
  int i, j, temp;
  for (i = 0; i < n; i++) {
    for (j = 0; j < i; j++) {
      temp = A[i][j];
      A[i][j] = A[j][i];
      A[j][i] = temp;
    }
  }
}

2.已知二叉链表的类型定义如下:

typedef struct btnode {
	DataType data;
	struct btnode *lchild, *rchild;
} * BinTree;

假设visit(bt)是一个已定义的过程,其功能是访问指针bt所指结点。设计在二叉链表上的先序遍历算法和中序遍历算法。

(博主的答案,没找到自考办给的官方答案,如果有小伙伴找到了辛苦下方评论留下地址)

//先序遍历【根左右】
void preOrder(BinTree bt) {
	if (bt !== NULL) {
		visit(bt);
		preorder(bt -> lchild);
		preorder(bt -> rchild);
	}
}
//中序遍历【左根右】
void midOrder(BinTree bt) {
	if (bt !== NULL) {
		preorder(bt -> lchild);
		visit(bt);
		preorder(bt -> rchild);
	}
}

2022年10月

应用题

1.题29-1图和题29-2图为俩种形态的二叉树。
问1:题29-1图、题29-2图各属于何种类型的二叉树?
问2:二叉树通常有哪俩类存储结构?

答:


2.无向图如题30图所示。
问1:列出所有简单回路。
问2:写出邻接矩阵。自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】_第23张图片
答:


3.设待排序的键值为 45,38,66,90,88,10,25,45。利用冒泡排序算法进行排序,已知第一趟排序后的键值为:38,45,66,88,10,25,45,90,请写出后续每趟排序的结果。

答:


4.设序列 { d c b a h e i f g } 和 { a b c h d i e f g } 分别是一棵二叉树的先序序列和中序序列,请画出该二叉树。

答:


5.给定表(Jan, Feb, Mar, Apr, May, Jul)。散列表的地址空间为 0 ~10,设散列函数H(x) == ⌊i / 2⌋,其中i为键值中第一个字母在英语字母表中的序号,要求画出以线性探测法解决冲突的散列表。

博主额外补充:⌊⌋符号是向下取整的意思,丢弃结果的小数部分。

答:


算法设计题

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

(博主的答案,没找到自考办给的官方答案,如果有小伙伴找到了辛苦下方评论留下地址)

int search(int A[], int n, int k) {
  int i = 0;
  int resIndex = -1; // 最终找到的下标位置
  while(i <= n - 1) {
    if (A[i] != k) {
      i++;
    } else {
      resIndex = i;
      break; // 找到了,退出循环
    }
  }
  return resIndex;
}

2.设计算法按先序次序打印二叉树T中叶子结点的值。

答:


你可能感兴趣的:(数据结构导论,算法,数据结构,自考数据结构导论,自考数据结构导论大题汇总,自考数据结构应用题算法题汇总)