数据结构
Sicilly_琬姗
这个作者很懒,什么都没留下…
展开
-
二分查找(c语言实现)
题目本题要求实现二分查找算法。函数接口定义:Position BinarySearch( List L, ElementType X );其中List结构定义如下:typedef int Position;typedef struct LNode *List;struct LNode { ElementType Data[MAXSIZE]; Position Las...原创 2019-07-30 18:53:32 · 2621 阅读 · 0 评论 -
是否同一棵二叉搜索树(c语言实现)
几种方法分别建两棵搜索树的判别方法根据两个序列分别建树,再判别树是否一样不建树的判别方法3124 vs 3412 根结点都是3 {1 2} 3 {4} vs {1 2} 3 {4}一样3124 vs 3241根结点都是3{1 2} 3 {4} vs {2 1} 3 {4}不一样建一棵树,再判别其他序列是否与该树一致(本文采取该方法)求解思路搜...原创 2019-08-07 15:15:33 · 1221 阅读 · 1 评论 -
【数据结构】哈夫曼树与哈夫曼编码
定义带权路径长度(WPL):设二叉树有n个叶子结点,每个叶子结点带有权值wkw_kwk,从根节点到每个叶子结点的长度为lkl_klk,则每个叶子结点的带权路径长度之和就是:WPLWPLWPL=∑k=1n\sum_{k=1}^{n}∑k=1n最优二叉树或哈夫曼树:WPL最小的二叉树哈夫曼树的构造每次将权值最小的两棵二叉树合并如何选取两个最小的元素?利用堆typedef struct...原创 2019-08-24 16:21:30 · 430 阅读 · 0 评论 -
【数据结构】集合及运算
集合的表示集合运算:交、并、补、差,判定一个元素是否属于某一集合并查集:集合并、查某元素属于什么集合并查集问题中集合存储如何实现?可以用树结构表示集合,树的每个结点代表一个集合元素采用数组存储形式集合运算(1)查找某个元素所在的集合(用根结点表示)int Find( SetType S[ ], ElementType X ){ /* 在数组S中查找值为X的元素所属的...原创 2019-08-24 18:02:30 · 4227 阅读 · 0 评论 -
【数据结构】图的遍历(BFS和DFS)
图的遍历图的遍历是指从图中的某一顶点出发,按照某种搜索方式沿着途中的边对图中所有顶点访问一次且仅访问一次。图的遍历主要有两种算法:广度优先搜索和深度优先搜索。广度优先遍历BFS广度优先遍历(BFS 也叫广度优先搜索)类似于二叉树的层序遍历算法#define MaxSize 100;bool visited[MaxSize]; //访问数组,记录顶点是否被访问过,初始都赋值为false...原创 2019-08-25 16:45:25 · 1116 阅读 · 1 评论 -
【数据结构】图的应用(普利姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法、拓扑排序)
克鲁斯卡尔算法我们知道生成树是包含n个顶点,n-1条边的换一种思路,我们可以从网中的边这个角度,找最小权值的边,直到找到n-1条边。思路将图中边按照权值从小到大排列,然后从最小的边开始扫描,设置一个边的集合来记录,如果该边并入不构成回路的话,则将该边并入当前生成树。直到所有的边都检测完为止。排列: 请参考→ 堆不构成回路:请参考→ 并查集#define MaxSize 100typ...原创 2019-08-26 01:15:15 · 3963 阅读 · 1 评论 -
03-树3 Tree Traversals Again (c++递归实现)
题目An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the keys numbered from 1 to 6) is traversed, the s...原创 2019-08-16 21:42:01 · 267 阅读 · 0 评论 -
04-树7 二叉搜索树的操作集(c语言实现)
题目本题要求实现给定二叉搜索树的5种常用操作。函数接口定义:BinTree Insert( BinTree BST, ElementType X );BinTree Delete( BinTree BST, ElementType X );Position Find( BinTree BST, ElementType X );Position FindMin( BinTree BST ...原创 2019-08-17 20:52:12 · 393 阅读 · 0 评论 -
【数据结构】堆 笔记
什么是堆优先队列(Priority Queue):特殊的“队列”,取出元素的顺序是依照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序。若采用数组或链表实现优先队列数组 :插入 — 元素总是插入尾部 ~ Θ\ThetaΘ ( 1 )删除 — 查找最大(或最小)关键字 ~ Θ\ThetaΘ ( n )从数组中删去需要移动元素 ~ O( n )链表:插入 — 元素总是插入...原创 2019-08-22 17:53:13 · 189 阅读 · 0 评论 -
【数据结构】KMP算法(c语言)
#include <stdio.h>#include <string.h> #include <stdlib.h> typedef int Position; //返回数组下标#define NotFound -1 void BuildMatch( char *pattern, int *match ){ Position i, j;...原创 2019-08-31 23:47:15 · 599 阅读 · 1 评论 -
【数据结构】二叉树的存储和遍历
二叉树的存储结构顺序存储结构二叉树的顺序存储结构是指用一组地址连续的存储单元依次自上而下、从左到右存储完全二叉树上的结点,即将完全二叉树上编号为 i 的结点存储在数组下标为 i−1的数组分量中,然后通过一定方式确定结点在逻辑上的父子或兄弟关系。 空间浪费比较大链式存储结构二叉树每个结点最多两个孩子,所以设计二叉树的结点结构时考虑两个指针指向该结点的两个孩子。二叉树结点结构:t...原创 2019-08-13 19:45:39 · 3621 阅读 · 0 评论 -
树的同构(c语言静态链表实现)
题目给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。现给定两棵树,请你判断它们是否是同构的。输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数NN (\le 10≤10),即该树的结点数(此...原创 2019-08-06 18:30:08 · 504 阅读 · 0 评论 -
判断出栈序列是否合法(c语言实现)
题目Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, …, N and pop randomly. You are supposed to tell if a given sequence of numbers is a possible pop sequence of ...原创 2019-08-02 12:17:00 · 4316 阅读 · 0 评论 -
两个有序链表序列的合并(c语言实现)
题目本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。函数接口定义:List Merge( List L1, List L2 );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next;...原创 2019-07-30 17:33:00 · 20580 阅读 · 14 评论 -
Maximum Subsequence Sum最大子列和问题(c语言实现)
题目代码#include <stdio.h>#define MaxSize 100000int main(){ int K; int i; int a[MaxSize]; int flag=0,zero=0; int ThisSum=0,MaxSum=0; int tempindex=0; scanf("%d",&K); //输入数组长度K in...原创 2019-07-30 12:45:03 · 762 阅读 · 3 评论 -
【数据结构】多项式乘法与加法(c语言链表实现)
题意理解求解思路1.多项式表示数据结构设计//将struct与typedef分开定义typedef struct PolyNode *Polynomial; //使用 typedef 给一个还未完全声明的类型 PolyNode 起了一个新别名Polynomialstruct PolyNode{ int coef; //系数 int expon; //指数 Polyn...原创 2019-07-29 17:04:49 · 14556 阅读 · 5 评论 -
【数据结构】队列-顺序队列、循环队列、链队、双端队列
定义队列是只允许在一端进行插入,而在另一端进行删除的线性表。队头(Front):允许删除的一端,又称为队首。队尾(Rear): 允许插入的一端。先进入队列的元素必然先离开队列,即先进先出(First In First Out)简称FIFO。**对比:**栈中元素后进去的必然先出来,即后进先出LIFO(Last In First Out)。顺序队列用数组来实现队列,可以将队首放在数组下...原创 2019-07-24 22:05:17 · 1281 阅读 · 0 评论 -
【数据结构】栈-顺序栈、链式栈、共享栈
栈的定义栈(Stack):只允许在一端进行插入或删除操作的线性表栈顶(Top):线性表允许进行插入和删除的那一端。栈底(Bottom):固定的,不允许进行插入和删除的另一端。Tips:1.栈是受限的线性表,所以自然具有线性关系。2.栈中元素后进去的必然先出来,即后进先出LIFO(Last In First Out)C ←TopBA←Bottom...原创 2019-07-24 13:54:53 · 479 阅读 · 1 评论 -
【数据结构】线性表的链式表示-循环单链表、循环双链表、静态链表
循环单链表从任何一个结点出发都能访问到链表的每一个元素判空条件不是头节点的后继指针是否为空,而是它是否等于头指针有时对单链表常做的操作实在表头和表尾进行的,此时可对循环单链表不设头指针而仅设尾指针,从而使得操作效率更高。循环双链表在循环双链表L中,尾结点的后继指针指向表头结点,头节点的前驱指针指向表尾结点当循环双链表为空表时,其头结点的prior域和next域都等于L静态...原创 2019-07-23 19:19:40 · 396 阅读 · 0 评论 -
【数据结构】线性表的链式存储-双链表
引言单链表结点中只有一个指向其后继的指针,这使得单链表只能从头结点依次顺序地向后遍历。若要访问某个结点的前驱结点(插入、删除操作时),只能从头开始遍历 ,访问后继结点的时间复杂度为 0(1),访问前驱结点的时间复杂度为 O(n)。为了克服单链表的上述缺点,引入了双链表,双链表结点中有两个指针 prior 和 next, 分别指向其前驱结点和后继结点。如下图:双链表的结点结构体typed...原创 2019-07-23 18:50:13 · 318 阅读 · 0 评论 -
【数据结构】线性表的链式存储-单链表
单链表的定义线性表的链式存储又称为单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素。 为了建立起数据元素之间的线性关系,对每个链表结点,除了存放元素自身的信息之外,还需要存放一个指向其后继的指针。每个结点包括数据域和指针域。节点是一个结构体,看一下结构体的定义:typedef struct LNode{ ElemType data; struct ...原创 2019-07-23 18:18:59 · 733 阅读 · 1 评论 -
【数据结构】线性表的顺序存储结构(c语言实现)
/*********************************************************//* Project: sequence_list(数据结构-顺序表) Date: 2019/07/22 Author: CWS CreatList(SqList &L,int n) 参数:顺序表L,顺序表长度n 功能:创建长度为的顺...原创 2019-07-23 14:53:03 · 2900 阅读 · 0 评论