
数据结构
文章平均质量分 93
摩霄志在潜修羽
骐骥一跃,不能十步。驽马十驾,功在不舍。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
王道数据结构2.2.1
题目要求设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点。代码void del_x(LinkList &L, ElemType x){ LinkList p; if(L == NULL) return; if(L->data == x) { p = L; L = L->next; free(p); // * del_x(L, x); } else { del_x(L->next, x); }}疑点解析1.返回的头原创 2020-07-14 09:34:54 · 375 阅读 · 0 评论 -
操作系统之动态分区分配与回收—C语言实现
前言这篇文章用来记录操作系统实验之 动态分区分配与回收。不想从网上copy代码,打算自己从头到尾写一下,没想到却花了我整整两个晚上的时间,好在终于写完了…动态分区分配采用的算法是最佳适应(best fit, BF)算法,回收内存参考文章见后面。懒得写解析了,后面有时间再更新吧。代码#include<stdio.h>#define FREE 0 ...原创 2019-12-13 22:29:49 · 21475 阅读 · 9 评论 -
二叉树的层序遍历
说明所谓层序遍历,即按一层一层的顺序遍历二叉树。有二叉树如图,则层序遍历结果为: ABCDEFGABCDEFGABCDEFG做法:使用队列存储结点。对于二叉树的每层,弹出一个结点并输出其值,而后将该结点的孩子结点放入二叉树。重复上述步骤直到队列为空。图示代码void LevelOrderReverse(BiNode *btree){ queue<BiNode*&...原创 2019-05-03 16:52:50 · 1834 阅读 · 2 评论 -
bfs遍历图
#include<iostream>#include<queue>#include<cstring>using namespace std;int Graph[5][5] = { 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5,};struc...原创 2019-05-13 22:49:54 · 408 阅读 · 0 评论 -
Huffman算法与解析
Huffman算法解决的问题 ex.在传输电文时,每种字符出现的频率不同,想让电文在能够表达其意思的前提下尽可能短,自然需要让出现频率高的字符占的位数尽可能少。思想 Huffman算法的核心是贪心算法。想要达到上面所述的目的,就需要让权重高的字符编码位数尽可能低。 假设共有五个字符,对应的权重分别是:123451234512345,按照贪心的策略,每次选出频率最小的两个结点构成一...原创 2019-05-06 22:52:23 · 7895 阅读 · 0 评论 -
图的邻接矩阵存储与深搜广搜
存储结构 保存图的顶点名称,需要一个一维数组;保存顶点间的关系,需要一个二维数组;保存图的类型(有向图、无向图等)需要一个整形存储;另外,还需要明确图的顶点数与边数,方便创建等操作。代码#include<iostream>#include<cstring>#include<queue>#define INFINITY 0using namespa...原创 2019-05-14 15:24:30 · 355 阅读 · 0 评论 -
基于MST性质的Prim算法求最小生成树
最小生成树的概念假设在个城市间修路,则联通个城市只需要条道路。目的是让道路的总花销最少,求最佳方案。MST的性质MST(Most Spanning Tree)性质即:最小生成树性质:设G=(V,E)是一个连通网络,U是顶点集V的一个非空真子集。若(u,v)是G中一条“一个端点在U中(例如:u∈U),另一个端点不在U中的边(例如:v∈V-U),且(u,v)具有最小权...原创 2019-05-14 21:09:02 · 309 阅读 · 0 评论 -
蓝桥杯之Huffman树
题目描述解析 把这道题作为哈夫曼算法的练习题,没什么难度,只是输出每次构造的子树的结点值,使用cnt在每次合并操作时做记录即可。代码#include<iostream>#include<queue>#include<vector>#include<cstdlib>#include<algorithm>using na...原创 2019-05-07 21:31:05 · 627 阅读 · 0 评论 -
串的模式匹配——暴力法与KMP算法
1.BF算法(暴力法)初始化两个数组下标,循环比较两个字符串的字符是否相等,相等则下标同时进一,比较下个元素直到匹配成功;不相等则使匹配的串下标回退到 0,被匹配的串下标回退到比较的初始位置+1,循环往复。代码如下#include<iostream>#include<string>using namespace std;int BFMatching(st...原创 2019-05-20 20:41:37 · 931 阅读 · 0 评论 -
拓扑排序——《数据结构》课设
拓扑排序相关概念先给出百度百科的有关概念: 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合...原创 2019-07-01 00:39:44 · 1806 阅读 · 0 评论 -
二叉树的非递归遍历
代码#include<iostream>#include<cstdio>#include<stack>#include<cstdlib>using namespace std;typedef char ElemType;typedef struct Node{ ElemType data; struct Node *lnode, *...原创 2019-05-03 15:46:09 · 180 阅读 · 0 评论 -
树的顺序存储与链式存储
前言 二叉链表表示树比三叉链表所需空间少,然而想要达到访问双亲的目的,就需要对树进行遍历。 三叉链表比二叉链表多了parentparentparent指针用来记录双亲结点,可以很快达到访问双亲的目的。 选择使用哪种表示方法还要看具体场景。代码#include<iostream>#include<cstdio>#include<cstdlib>...原创 2019-04-26 18:58:41 · 2074 阅读 · 0 评论 -
单链表的创建--从零开始
上学期临近期末的时候用Word写了一篇链表详解,今天突然想到自己一直在搞算法题,很长时间没有用链表了。试着在纸上写了几步,发现回想起来竟然有些吃力,这里把上学期写的链表详解贴上来mark一下,顺便以此作为数据结构笔记的第一篇。学习链表需要了解的基本知识点:首先,想要熟练使用链表,就要知道两大类基本知识点: 1. 指针 2.结构体 (如果对两个知识点有疑惑请百度一下,没有什么问题是百...原创 2018-09-10 13:01:28 · 91087 阅读 · 40 评论 -
下推栈的相关操作
因为数学建模的缘故,N多天都没有做算法练习了。今天晚上先打一下自己关于下推栈创建的心得作为过渡,明天下午去图书馆刷个够!栈的定义与性质首先给出栈的百度百科:栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;...原创 2018-09-17 19:12:13 · 647 阅读 · 0 评论 -
双向链表的创立与相关操作
双向链表,顾名思义,就是每个数据结点含有两个指针,分别指向前驱结点和后继结点。双向链表图示: 在理解单链表的创立后,结合双链表的特点,很容易写出其创建。首先,双链表比单链表多了一个前驱指针pre,因此结构体的建立是这样的(以之存储int类型的num为例)typedef struct node{ int num; struct node *pre;//前驱节点 ...原创 2018-09-10 19:37:57 · 310 阅读 · 0 评论 -
循环链表与约瑟夫环
循环链表其实就是将单链表(或者双向链表首尾相连)构成的,目前我使用的循环链表的创建有两种: (1)创建单链表并记录最后一个点,最后将最后一个点指向head即可。 很简单,只需要在while循环后加上一句pend-&gt;next=head;即可 代码:NODE *createlink(){ NODE *head,*pnew,*pend; int n; hea...原创 2018-09-10 21:10:35 · 341 阅读 · 0 评论 -
中缀转后缀及后缀求值
【中缀表达式转后缀表达式】#include<iostream>#include<string>#include<cmath>#include<algorithm>#include<cstdio>#include<cstring>#include<ctype.h>using namespace std原创 2018-11-23 23:25:07 · 330 阅读 · 0 评论 -
一个简单存储结构的链表与顺序表实现
顺序表实现//顺序表#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAX_SIZE 1024typedef struct { //数据域 char name[MAX_SIZE]; int score, total; double fina;}Data;typede...原创 2019-03-08 00:11:35 · 404 阅读 · 0 评论 -
循环队列的两种实现方法
循环队列的两种实现方法顺序存储结构 示意图参考严蔚敏版《数据结构》。顺序存储为何宜选循环队列? 队列的顺序表存储中,除了数据域datadatadata,还应附设两个坐标frontfrontfront和rearrearrear用来记录头结点和尾结点的位置。对于poppoppop操作,依靠 front+1front+1front+1 这样的上移操作来进行。假设队列中已经有一些元素,经过几次...原创 2019-03-30 11:31:42 · 2490 阅读 · 5 评论 -
顺序栈的表示与实现
//顺序表实现栈#include<iostream>#include<cstring>#include<string>#define OK 1#define ERROR -1#define STACK_INIT_SIZE 1024#define STACKINCREMENT 128using namespace std;typedef int ...原创 2019-03-26 19:44:38 · 550 阅读 · 0 评论 -
队列的链式存储与相关操作
一、队列的链式存储与相关操作注意存储结构(带头结点)如图:q.frontq.frontq.front指向的单元为头结点,而队头的实际位置为q.front−>nextq.front->nextq.front−>next.q.popq.popq.pop操作时,在释放队头指针前,应该先判断所poppoppop的元素是否是最后一个,是最后一个的话需要先将尾指针...原创 2019-03-26 22:08:28 · 363 阅读 · 0 评论 -
关于传递指针与传递引用作参数的测试
前言以单链表作示范,对比传递指针作参数与传递引用作参数的不同之处。传递指针作参数测试代码图示说明:我先在主函数创建了一个节点存放值111,然后在CreateLink()CreateLink()CreateLink()函数中创建另一个值为222的节点并让头指针指向此节点。此时链表有两个单元,值1−>21->21−>21.未改动代码:如图黑色部分,我...原创 2019-04-26 13:11:15 · 2558 阅读 · 3 评论 -
数组仿真链表以及效率的对比说明
今天读了几篇张新华编写的《算法竞赛宝典》一书第三部,有了一些心得。 了解链表的创建后,我们可以使用数组来模拟链表的相关操作(尽可能开辟一个较大内存,因为数组仿真不具备链表动态开辟内存的特点)。对于每个“链结”,用linkNum[i]来存放数组元素的值,linkPos[i]来存放下一个元素的地址(其实也就是下一个元素的位置)。 代码://数组仿真链表#include<stdio....原创 2018-09-12 22:53:01 · 608 阅读 · 0 评论