数据结构
数据结构课程相关知识和题目
abysswatcher_1
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构课程设计-(五)行车路线(图的应用)
行车路线 小明和小芳出去乡村玩,小明负责开车,小芳来导航。 小芳将可能的道路分为大道和小道。大道比较好走,每走1公里小明会增加1的疲劳度。小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公里小明会增加s2的疲劳度。 例如:有5个路口,1号路口到2号路口为小道,2号路口到3号路口为小道,3号路口到4号路口为大道,4号路口到5号路口为小道,相邻路口之间的距离都是2公里。如果小明从1号路口到5号路口,则总疲劳值为(2+2)2+2+22=16+2+4=22。 现在小芳拿到了地图,请帮助她规划原创 2020-12-22 08:57:21 · 2770 阅读 · 0 评论 -
数据结构课程设计 - (四)二叉排序树(删除,插入,建立,查询)
1、二叉排序树与文件操作 功能要求: (1)从键盘输入一组学生记录建立二叉排序树; (2)中序遍历二叉排序树; (3)求二叉排序树深度; (4)求二叉排序树的所有节点数和叶子节点数; (5)向二叉排序树插入一条学生记录; (6)从二叉排序树中删除一条学生记录; (7)从二叉排序树中查询一条学生记录; (8)以广义表的形式输出二叉排序树 //定义学生记录类型 Struct student { Char num[6]; //学号 Int grade; //成绩 }; //定义二叉排序树节点值原创 2020-12-18 08:45:51 · 2924 阅读 · 5 评论 -
数据结构课程设计-(三)哈夫曼编码器
哈夫曼编/译码器 任务:建立最优二叉树函数。 要求:可以建立函数输入二叉树,并输出其哈夫曼树。 在上交资料中请写明:存储结构、基本算法(可以使用程序流程图)、输入输出、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法; 利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一原创 2020-12-15 09:10:26 · 7104 阅读 · 3 评论 -
数据结构课程设计- (二) 栈与队列(迷宫问题)
迷宫问题求解 任务:可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出; 要求:在上交资料中请写明:存储结构、基本算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法。 利用栈实现各个方向的存储,若走到死路则退到前一格,实现寻找路径的功能: #include <bits/stdc++.h> using namespace std; #define maxsize 100 typedef struct point//点 {原创 2020-12-13 15:26:46 · 4234 阅读 · 3 评论 -
数据结构课程设计-(一)线性结构(约瑟夫环)
joseph环 任务:编号是1,2,…,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。 要求:利用单向循环链表存储结构模1拟此过程,按照出列的顺序输出各个人的编号。 测试数据:m的初值为20,n=7 ,7个人的密码依次为3,1,7,2,4,7,4,首先原创 2020-12-08 22:35:51 · 1858 阅读 · 0 评论 -
图的遍历(BFS,DFS)
以邻接表的形式创建图: #include <bits/stdc++.h> using namespace std; typedef int vtype; typedef struct node //非头节点 { int num; struct node *next; } anode; typedef struct pnode //每行的头节点 { vtype data; anode *firstarc; int out, in, du; } vnode;原创 2020-12-07 22:23:50 · 886 阅读 · 0 评论 -
纸牌游戏-小猫钓鱼(队列与栈综合)
游戏规则 某一天张兵和小明在一起玩扑克牌,每个人各自拿取一份扑克牌,张兵先把一张扑克牌放在桌子上,小明再放一张,出牌时 ,如果某人打出的牌与桌上的某张牌的牌面相同,即可将两张相同的牌及其之间所夹的牌全部取走,并依次放到自己手牌的 末尾,当任意一人的手牌全部出完后,游戏结束,对手获得胜利。 我们先来分析游戏中的几种操作,分别是出牌和赢牌,每个人的手牌可以设置成队列结构,出牌时从队列首弹出一个元素, ...原创 2020-02-11 21:46:41 · 2630 阅读 · 1 评论 -
堆中的路径
题意理解: 给定一系列数字,将其插入一个初始为空的最小堆中,随后给定任意下标I,打印从H[i]到根节点的路径。 ###样例输入 5 3 46 23 26 24 10 5 4 3 ###输出样例 24 23 10 46 23 10 26 10 #include <stdio.h> #include <stdlib.h> #define MAXN 1001 #define MI...原创 2020-02-10 21:50:55 · 325 阅读 · 0 评论 -
并查集
问题引入: 例原创 2020-02-09 21:11:57 · 174 阅读 · 0 评论 -
哈夫曼树与哈夫曼编码
什么是哈夫曼树 带权路径长度:设二叉树有n个叶子结点,每个叶子结点带有权值Wk,从根结点到每个叶子结点的长度为lk,则每个叶子结点的带权路径长度之和就是: 【例】有五个叶子结点,权值分别为[1,2,3,4,5],用此权值序列可以构造出不同的多个二叉树。 分别计算他们的带权路径长度: 1、WPL = 5X1 + 4X2 + 3X3 + (1+2)X4 = 34 2、WPL = 1X1 + 2X2...原创 2020-02-09 17:16:50 · 994 阅读 · 0 评论 -
堆(建立,插入,删除)
首先定义优先队列,优先队列是一种特殊的队列,取出元素的顺序是依据优先权(关键字)的大小,而不是元素进出队列的顺序。 如果使用二叉搜索树存储这个优先队列,就构成了“堆”结构。 若任意的根节点的元素都比其子树中的任何元素都大,则该堆称为最大堆;反之称为最小堆。 堆结构常进行的操作有(以最大堆为例子): 一 定义堆的结构: typedef struct HeapStruct *MaxHeap; str...原创 2020-02-06 18:17:33 · 241 阅读 · 0 评论 -
单链表逆转(Reversing Linked List)
输入数据: 给定头结点的地址,以及接下来的结点个数N,和要逆转的结点个数K,接下来输入N组数据,分别是一个结点的地址,以及其元素,和其指针。(输入的结点不一定在同一条链表上)。 sample input: 00100 6 4 00000 4 99999 00100 1 12309 68237 6 -1 33218 3 00000 99999 5 68237 12309 2 33218 要求将前k个...原创 2020-02-05 21:05:46 · 799 阅读 · 0 评论 -
判断二叉树是否相同
给定一个插入序列就可以唯一确定一棵二叉搜索树,但是不同的插入序列也可能构成相同的二叉搜索树。例如按2,1,3和2,3,1插入空的二叉搜索树得到的结果都是一样的。 输入要求,先输入两个整数,第一个整数代表树的结点个数,第二个整数代表,除了样例外,还要输入的进行比较的序列的个数。 1.可以不建树进行判断。先比较第一个数是否相同,若相同,则将后序序列中比第一个数小的数字分成一堆放在该数字之前,将比该数大...原创 2020-02-03 19:42:38 · 912 阅读 · 1 评论 -
平衡二叉树
一 平衡二叉树的定义 二叉树中元素的不同插入顺序会导致不同的深度和平均查找长度ASL,平均查找长度(ASL)等于查找每个元素要进行比较的次数除以元素的总个数。 定义平衡因子(balance factor),BF=Hl-Hr,Hl,Hr分别为左右子树的高度,平衡二叉树(简称AVL),BF的绝对值应小于1。 设含有nh为高度为h的平衡二叉树的最小结点数,则nh=n(h-1)+n(...原创 2020-02-02 12:16:04 · 1084 阅读 · 0 评论 -
二叉搜索树(查找,插入,删除)
一. 二叉搜索树也称为二叉排序树或二叉查找树,简称为BST。 其可以为空,也可以不为空,但满足以下的条件。 1 非空左子树的所有键值小于其根节点的键值。 2 非空右子树的所有键值大于其根节点的键值。 3 左右子树都是二叉搜索树。 二. 二叉搜索树的特殊操作函数: position find(elementtype x,bintree BST)从二叉树中寻找元素x,并返回元素的地址。 positio...原创 2020-02-01 12:00:48 · 332 阅读 · 0 评论 -
二叉树的同构判断
一 题意理解 给定两颗树,T1,T2,若T1可以通过若干次的左右子互换变成T2,则称为这两棵树同构。 二 输入数据 先输入一个N,代表接下来的个数,然后輸入N组元素,分别为节点名称,其左子的序号,右子的序号,若其不存在左子或右子,则输入"-"。 例: 解题思路 1 二叉树表示 2 建二叉树 3 同构判断 1二叉树表示: 用结构数组表示二叉树(静态链表) 设置数据结构: struct treen...原创 2020-01-30 14:14:51 · 2936 阅读 · 0 评论 -
遍历二叉树的应用
问题一.输出二叉树中的叶节点(左右子都为空) 只需在遍历过程中增加一个if语句判断是否为空即可。 void preorderprintleaves(Bintree BT) { if(BT){ if(!BT->Left&&!BT->Right) printf("%d",BT->Data); preord...原创 2020-01-29 19:14:10 · 273 阅读 · 0 评论 -
二叉树的遍历.队列与栈实现(深度优先,广度优先)
树的遍历通常有递归和非递归两种形式实现。 一.递归实现原创 2020-01-29 11:41:28 · 2599 阅读 · 0 评论
分享