
数据结构课程笔记
爱吃老谈酸菜的DV
选择适合自己的。
展开
-
排序
一、基本概念排序:给定一组记录的集合{r1, r2, ……, rn},其相应的关键码分别为{k1, k2, ……,kn},排序是将这些记录排列成顺序为{rs1, rs2, ……,rsn}的一个序列,使得相应的关键码满足ks1≤ks2≤……≤ksn(称为升序)或ks1≥ks2≥……≥ksn(称为降序)。正序:待排序序列中的记录已按关键码排好序。逆序(反序):待排序序列中记录的排列顺序与排...原创 2019-12-18 14:40:49 · 167 阅读 · 0 评论 -
查找
一、查找的基本概念列表:由同一类型的数据元素组成的集合。关键码:数据元素中的某个数据项,可以标识列表中的一个或一组数据元素。键值:关键码的值。主关键码:可以唯一地标识一个记录的关键码。次关键码:不能唯一地标识一个记录的关键码。查找 :在具有相同类型的记录构成的集合中找出满足给定条件的记录。查找的结果 :若在查找集合中找到了与给定值相匹配的记录,则称查找成功;否则,称查找失败。静态...原创 2019-12-02 20:19:15 · 218 阅读 · 0 评论 -
关于图的各种问题及操作
一、图的连通性问题(一)无向图判断连通性求连通分量个数求解图是否连通。1.count=0;2. for (图中每个顶点v)2.1 if (v尚未被访问过)2.1.1 count++;2.1.2 从v出发遍历该图(函数调用);3. if (count==1) cout<<“图是连通的”;else cout<<“图中有”<<count<&...原创 2019-11-29 00:01:03 · 397 阅读 · 0 评论 -
图的相关概念和定义
一、图的逻辑结构(一)图的定义图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G=(V,E)ps:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合。(二)基本概念1.无向边:顶点vi和vj之间的边没有方向,表示为(vi,vj)。2.无向图:顶点vi和vj之间的边没有方向,表示为(vi,vj)。3.有向边:从顶点vi到vj的边有方向,表示为<vi,vj...原创 2019-11-28 23:30:40 · 778 阅读 · 0 评论 -
二叉树的其他算法(统计节点个数等)
描述要求:1.采用二叉链表的方式进行存储2.构造一个二叉树类实现以下算法:1.统计树中节点个数2.统计树中叶子节点个数3.统计树的高度4.二叉树左右子树的交换输入扩展的前序序列.在一棵树处理结束后,根据响应判断是否处理下一棵树输出按要求输出信息(节点个数,叶子节点个数,二叉树的高度,交换之后的前序遍历)样例输入abc####Yab##c##N样例输出31...原创 2019-11-19 18:28:03 · 910 阅读 · 0 评论 -
二叉树的实现
描述要求:1.采用二叉链表的方式进行存储2.构造一个二叉树类实现以下算法:1.创建二叉树2.对二叉树进行前序、中序、后序遍历输入扩展的前序序列.在一棵树处理结束后,根据响应判断是否处理下一棵树输出前序、中序、后序样例输入ab##c##Yabc####N样例输出abcbacbcaabccbacbaAC代码#include<bits/stdc+...原创 2019-11-19 15:43:15 · 223 阅读 · 0 评论 -
最优二叉树-哈夫曼树及哈夫曼编码
一、相关概念叶子结点的权值:对叶子结点赋予的一个有意义的数值量。二叉树的带权路径长度:设二叉树具有n个带权值的叶子结点,从根结点到各个叶子结点的路径长度与相应叶子结点权值的乘积之和。 记为:哈夫曼树:给定一组具有确定权值的叶子结点,带权路径长度最小的二叉树。哈夫曼树的特点:权值越大的叶子结点越靠近根结点,而权值越小的叶子结点越远离根结点。只有度为0(叶子结点)和度为2(分支结点)的...原创 2019-11-11 22:59:33 · 597 阅读 · 0 评论 -
三叉链表
在二叉链表的基础上增加了一个指向双亲的指针域。data、lchild和rchild三个域的含义同二叉链表的结点结构;parent域为指向该结点的双亲结点的指针。结点数据类型声明:template<class T>struct Node{ T data; Node<T> * lchild, *rchild,*parent;};template &l...原创 2019-11-11 22:35:50 · 4238 阅读 · 1 评论 -
二叉树
一、二叉树的逻辑结构(一)定义:二叉树是n(n≥0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。(二)二叉树的特点:⑴ 每个结点最多有两棵子树;⑵ 二叉树是有序的,其次序不能任意颠倒。二叉树和树是两种树结构。(三)特殊的二叉树:1.斜树(1)所有结点都只有左子树的二叉树称为左斜树;(2)所有结...原创 2019-11-11 22:12:46 · 429 阅读 · 0 评论 -
树和二叉树
data:存储树中结点的数据信息parent:存储该结点的双亲在数组中的下标原创 2019-11-11 01:23:39 · 126 阅读 · 0 评论 -
数组
数组的定义:数组是由一组类型相同的数据元素构成的有序集合,每个元素受n(n≥1)个线性关系的约束,并称该数组为 n 维数组。元素本身可以具有某种结构,属于同一数据类型;数组是一个具有固定格式和数量的数据集合数组的存储结构与寻址——二维数组常用的映射方法有两种:(1)按行优列:先行后列,先存储行号较小的元素,行号相同者先存储列号较小的元素。aij前面的元素个数=整行数×每行元素个数+...原创 2019-11-04 23:17:11 · 229 阅读 · 0 评论 -
字符串
字符串是0个或多个字符组成的有限序列,只包含空格成为空格串,长度为0的串为空串,记作" "。模式匹配在主串S中寻找子串T的过程为模式匹配,T成为模式。1.BF算法。从主串S的第一个字符开始和模式T的第一个字符进行比较,若相等,则继续比较二者的后续字符;否则,从主串S的第二个字符开始和模式T的第一个字符进行比较,重复上述过程,直至S或T中所有字符比较完毕。int BF(char s[],c...原创 2019-11-04 20:56:41 · 206 阅读 · 1 评论 -
链表模拟队列
队列是一个单向的操作,有两个端口队列的特点是先进先出,后进后出。一下是链表模拟队列的过程:#include<bits/stdc++.h>using namespace std;template<class T>struct Node{ T data; Node *next;};template<class T>class T...原创 2019-10-25 17:01:57 · 201 阅读 · 0 评论 -
链表模拟栈
栈是只有一个端口的容器,只能从一边进行放入和取出的操作。栈的特点是先进后出,后进先出。以下是用链表模拟栈的基本操作:#include<bits/stdc++.h>using namespace std;template<class T>struct Node{ T data; Node *next;};template<class ...原创 2019-10-25 17:20:49 · 251 阅读 · 0 评论 -
约瑟夫环问题(循环链表实现)
描述约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。输入8 1 3 (n=8 k=1 m=3 )输出7 (剩下的那个)样例输入8 3 1样例输出7AC代码#include<bits/stdc...原创 2019-10-08 08:49:47 · 331 阅读 · 0 评论 -
有序双向链表的实现
双向链表要求建立当前节点和他前驱和后继的关系,切必须保证有序。包含插入、删除、排序、遍历输出等函数。详见代码:#include <iostream>using namespace std;template<class T>struct Node{ T data; Node<T> *rlink,*llink;};template...原创 2019-10-08 08:46:56 · 1203 阅读 · 1 评论 -
单链表的实现
带头节点的单链表的实现,被卡了好久的Runtime Error,指针没有控制好。#include<bits/stdc++.h>using namespace std;template<class T>struct Node{ T data; Node *next;};template<class T>class Linklis...原创 2019-09-24 20:44:01 · 133 阅读 · 0 评论 -
线性表的实现
线性表模板的实现:#include<bits/stdc++.h>using namespace std;template<class T>class List{ T data[1000]; int len;public: List(){len=0;} List(T a[],int n){ for(int i=0;...原创 2019-09-21 00:11:24 · 124 阅读 · 0 评论