数据结构
文章平均质量分 50
HOVL_C++
这个作者很懒,什么都没留下…
展开
-
C++ 容器详解
首先说一下六大组件:算法,容器,迭代器,仿函数(函数对象),分配器,适配器简述:线性容器:vector(向量): 好比C语言中数组 顺序表 seqtable(a)内存连续 支持[]运算符 下标访问(b)动态内存管理 自动扩容(c)通过分配器来管理动态内存 预分配内存空间 减少动态内存管理的额外开销(d)可以随机位置做插入和删除,但只有在接近末尾进行插入和删除时才是高效的预分配内存和初始化vector v3(10); //10个int元素,初始值为0vec原创 2021-10-17 10:05:27 · 3238 阅读 · 1 评论 -
算法-----全排列
全排列主要思路: 1.固定最后一个值 2.把剩下的m-1个数再进行全排列 3.恢复原样,不影响下一种情况 void showArr(int arr[],int n){ int i; for(i=0;i<n;i++){ printf("%d ",arr[i]); } printf("\n");}void swap(int *pa,int *pb){ int tmp = *pa; *pa = *pb; *pb = tmp;}//数组总共n个数据 m个数需要进原创 2021-08-03 20:59:03 · 185 阅读 · 10 评论 -
朴素查找与kmp算法
朴素查找int search1(const char *str,const char *childstr){ int i; int len = strlen(childstr); for(i = 0;i!='\0';i++) { if(strncmp(str+i,childstr,len)==0) { return i; } } return -1;} int search(const char *str,const char *childstr){ int i,j;原创 2021-08-03 20:56:15 · 155 阅读 · 0 评论 -
数据结构---外部排序
外部排序外部排序:由于计算机内存有限,当数据量过大时,数据不能一次性加载到内存中,数据保存在外存中(硬盘,文件里面)上,(寄存器>Cache>内存>固态硬盘>机械硬盘),限制外部排序效率的是IO(读写)的效率。如果要提高外部排序的效率,就要减少IO次数。一般来说外排序分为两个步骤:预处理和合并排序。首先,根据可用内存的大小,将外存上含有n个纪录的文件分成若干长度为t的子文件(或段);其次,利用内部排序的方法,对每个子文件的t个纪录进行内部排序。这些经过排序的子文件(段)通常称为原创 2021-08-03 18:43:00 · 1277 阅读 · 0 评论 -
数据结构 15种内部排序方法 --- c语言
内部排序排序是计算机内经常进行的一种操作,其目的是将一组"无序"的记录序列调整为"有序"的记录序列。分内部排序和外部排序。若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持原创 2021-07-31 11:01:39 · 940 阅读 · 0 评论 -
图的应用及经典算法-----最短路径算法合集----c语言
最短路径定义最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。 算法具体的形式包括:确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题。确定终点的最短路径问题 - 与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径方向反转的确定起点的问题。确定起点终点的最短路径问题 - 即已知起点和终点,求两结点之间的最短路径。全局最短路径问题 - 求图原创 2021-07-30 14:09:53 · 652 阅读 · 0 评论 -
图的算法与应用 关键路径 --- c语言
拓扑排序对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。由AOV网构造拓扑序列的拓扑排序算法主要是循环执行以下两步,直到不存在入度为0的顶点为止。(原创 2021-07-29 22:25:23 · 296 阅读 · 0 评论 -
图的应用 最小支撑树 ----c语言
Prim算法普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。假设V是图中顶点的集合,E是图中边的集合,TE为最小生成树中的边的集合,则prim算法通过以下步骤可以得到最小生成树:1:初始化:U={u 0},TE={f}。此步骤设立一个只有结点u 0的结点集U和一个空的边集TE作为最小生成树的初始形态,在随后的算法执行原创 2021-07-29 22:12:10 · 1106 阅读 · 0 评论 -
图的应用 DFS与BFS算法----c语言
深度优先遍历 DFS假设给定图G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中所有顶点均已被访问为止。图的深度优先遍历类似于树的前序遍历。采用的搜索方法的原创 2021-07-29 19:48:14 · 572 阅读 · 0 评论 -
数据结构 图的邻接表和邻接矩阵实现———c语言
图的邻接矩阵实现逻辑结构分为两部分:V和E集合。因此,用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间关系(边或弧)的数据,这个二维数组称为邻接矩阵。邻接矩阵又分为有向图邻接矩阵和无向图邻接矩阵邻接矩阵(Adjacency Matrix):是表示顶点之间相邻关系的矩阵。设G=(V,E)是一个图,其中V={v1,v2,…,vn}。G的邻接矩阵是一个具有下列性质的n阶方阵:①对无向图而言,邻接矩阵一定是对称的,而且主对角线一定为零(在此仅讨论无向简单图),副对角线不一定为0,有向图则不一原创 2021-07-29 19:29:07 · 1384 阅读 · 0 评论 -
红黑树--c语言实现
红黑树红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:性质1. 节点是红色或黑色。性质2. 根节点是黑色。性质3. 每个叶节点(NIL节点,空节点)是黑色的。性质4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)性质5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。这些约束强制了红黑树的关键性质: 从根到叶子的最长的可能原创 2021-07-25 19:52:39 · 1148 阅读 · 0 评论 -
平衡二叉树代码 栈实现
平衡二叉树定义:平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。 最小二叉平衡树的节点总数的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci(斐波那契)数列,1是根节点,F(n-1)是左子树的节点原创 2021-07-25 19:46:53 · 154 阅读 · 0 评论 -
数据结构 二叉排序树
二叉排序树二叉排序树(Binary Sort Tree)或者是一棵空树;或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;基本步骤若根结点的关键字值等于查找的关键字,成功。否则,若小于根结点的关键字值,递归查左子树。若大于根结点的关键字值,递归查右子树。若子树为空,查找不成功。插入算法:首先执行查找算法,找出被插结点的父亲结点。判断被插结点是其原创 2021-07-22 21:32:28 · 343 阅读 · 0 评论 -
数据结构 队列实现
队列队列(queue)在计算机科学中,是一种先进先出的线性表。队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。main函数测试函数#include <stdio.h>#include <stdlib.h>#include "queue.h"void show_menu(void){ printf("**原创 2021-07-20 08:32:21 · 204 阅读 · 0 评论 -
数据结构 链栈的实现
链栈链栈是一种数据存储结构,可以通过单链表的方式来实现,使用链栈的优点在于它能够克服用数组实现的顺序栈空间利用率不高的特点,但是需要为每个栈元素分配额外的指针空间用来存放指针域。测试函数#include <stdio.h>#include <stdlib.h>#include "linkedstack.h" //入栈顺序保存在in[]数组中,out[]数组序列能不能作为出栈序列 bool is_stack_in_out(int in[],int out[],int原创 2021-07-19 18:32:25 · 313 阅读 · 1 评论 -
数据结构 顺序栈的实现
顺序栈main函数 函数测试#include <stdio.h>#include <stdlib.h>#include "stack.h"#include "SeqStack.h"void show_menu(void){ printf("******栈功能测试界面******\n"); printf("*** 1.栈压入元素 \n"); printf("*** 2.栈弹出元素 \n"); printf("*** 3.查看栈顶元素 \n"); printf(原创 2021-07-18 20:34:46 · 197 阅读 · 0 评论 -
数据结构 循环双链表
循环双链表头文件#ifndef _CIR_DLINKED_LIST_H__#define _CIR_DLINKED_LIST_H__#include <stdio.h>#include <string.h>#include <stdlib.h>#include <stdbool.h>//双向循环链表的结点 typedef struct CDNode{ void *pelem; struct CDNode *prev; struct原创 2021-07-17 11:17:16 · 104 阅读 · 0 评论 -
数据结构 带头尾结点的双链表
带头尾结点的双链表头文件#ifndef DLINKED_LIST_H__#define DLINKED_LIST_H__#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef int ETYPE;typedef struct DNode{ ETYPE elem; //结点元素 数据域 struct DNode *prev; //前结点位置 内存地址 s原创 2021-07-17 11:15:34 · 321 阅读 · 0 评论 -
数据结构 双链表
双链表头文件#ifndef _DLINKED_LIST_H__#define _DLINKED_LIST_H__#include <stdio.h>#include <stdlib.h>#include <stdbool.h>/*typedef struct DNode{ void *pelem; struct DNode *prev; struct DNode *next;}DNode;typedef struct DLinkedL{ si原创 2021-07-17 11:08:38 · 100 阅读 · 1 评论 -
数据结构 链表万能形式
万能链表main 函数,测试代码#include <stdio.h>#include <stdlib.h>#include "slinkedlist.h"typedef struct Stu{ int no; char name[40]; int score[3];}Stu; int comp_no(const void *v1,const void *v2){ const struct Stu *ps1 = (const struct Stu *)v1;原创 2021-07-17 11:01:20 · 223 阅读 · 0 评论 -
数据结构 顺序表实现详解
顺序表main函数,测试代码#include <stdio.h>#include <stdlib.h>#include "seqlist.h"#include <stdbool.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ void showmenu(void){ printf("1.插入元原创 2021-07-17 10:55:51 · 114 阅读 · 0 评论 -
数据结构与算法 链表详解
数据结构与算法链表测试调用函数:#include <stdio.h>#include <stdlib.h>#include "singlelinketlist.h"void showMenu(void){ printf("***单向链表功能测试*****\n"); printf("** 1.插入一个元素 \n"); printf("** 2.查找 \n"); printf("** 3.链表为空判断 \n"); printf("** 4.元素个数 \n");原创 2021-07-16 18:05:29 · 158 阅读 · 0 评论