数据结构
是席木木啊
这个作者很懒,什么都没留下…
展开
-
数据结构-排序算法之快速排序
排序算法之快速排序1-快速排序的基本思想2-快速排序的过程图解第一次排序过程第二次分治排序过程子列表1的排序过程子列表2的排序过程子列表2-1的分治排序过程排序结果3-Java代码实现4-例题题目描述结题思路代码编写 快速排序属于交换排序的一种,其基本思想是基于分治法的。其算法时间复杂度为O(log2N),堪称是所有内部排序算法中平均性能最优的排序算法。。1-快速排序的基本思想 从待排序表L:【0…n】中任取原创 2022-02-08 19:12:11 · 2447 阅读 · 0 评论 -
数据结构[C语言]-二叉树前中后序-递归&非递归遍历代码集合
1 头文件 <BitTree.h> 由于二叉树非递归遍历实现时,需要用到栈和队列,因此,也将这部分代码这个头文件中了。#include <stdio.h>#include <stdlib.h>/************************************************************************//* 二叉链表结点原创 2021-12-08 14:21:33 · 994 阅读 · 0 评论 -
数据结构-【选择排序】堆排序
选择排序之堆排序1 大根堆的构建与堆中元素位置调整2 堆排序算法的代码实现3 堆排序代码测试 选择排序常见的包括简单选择排序和堆排序。对于堆排序,包括两个核心操作: **【1】**大根堆/小根堆的构建。主要涉及到完全二叉树的顺序存储结构表示和相关性质理解,以及堆构建过程中的元素位置调整。 **【2】**堆排序过程中,删除堆顶元素,并用堆底元素进行补位,接着对剩余原创 2021-11-19 02:16:12 · 454 阅读 · 0 评论 -
数据结构-【分块查找】多元函数条件极值求解最理想块长
多元函数条件极值求解最理想块长1 平均查找长度2 问题描述3 问题求解 分块查找,又称索引顺序查找,它吸取了顺序查找和折半查找各自的优点,既有动态结构,又适于快速查找。具体如何对待查找序列进行分块以及块内的查找(顺序查找或二分查找),就不再赘述了。1 平均查找长度 平均查找长度是衡量查找算法效率的最主要的指标。 若将一个长度为n的查找序列分为b个块,每个块内包含s原创 2021-11-13 00:56:04 · 3536 阅读 · 2 评论 -
数据结构-排序算法-1【直接插入排序】
打算把查找排序算法交换着来看,先叙述直接插叙排序的执行流程,再给出C++代码实现。1 插入排序算法思想 插叙排序算法,是将一个待排序的记录表,按其关键字大小插入到已经排序好的子序列列表之中,直到全部记录插入完成,算法执行完毕。2 直接插入排序算法-流程阐述 给出手写的过程,字写有些难看????????????…3 C++代码实现 &n原创 2021-10-31 22:43:41 · 458 阅读 · 0 评论 -
数据结构-查找【折半查找/二分查找】
折半查找,又称二分查找,仅适用于有序顺序表的查找。以下以基本数据类型的数组为例进行原理介绍和代码编写。有序顺序表的快速查找-折半查找1 算法基本思路2 核心代码编写3 查找测试1 算法基本思路 算法基本思路如下, 【1】首先将给定值key与顺序表的中间位置元素的值进行比较,若相等,则查找成功,返回该元素的存储位置;若不等,则所需查找的元素只能在中间元素之前或原创 2021-10-30 23:46:16 · 551 阅读 · 0 评论 -
数据结构-图【深度优先遍历递归与非递归&C++代码实现】
关于图的深度优先遍历(Depth-First-Search,DFS)算法,具体原理在此不做阐述,仅是结合算法原理给出C++的代码实现。DFS递归与非递归算法 & C++代码实现0 关于基本类的定义1 DFS递归算法实现2 DFS非递归算法实现3 代码测试4 链式栈类-LinkedStack0 关于基本类的定义 关于顶点表VNode、边表ArcNode、邻接表ALGraph的定义,同上篇文章中给出的;使原创 2021-10-30 20:22:35 · 703 阅读 · 0 评论 -
数据结构-图【图解BFS求解单源最短路径&C++代码实现】
接上前一篇《数据结构-图【广度优先遍历图解&C++代码实现】》,接着写BFS-图的广度优先遍历算法在求解单源最短路径上的应用。 单源最短路径,顾名思义,就是求:从图中的某个点P到其它各个点的最短路径长度。下面通过图解方式阐述整个处理流程,并给出对应的C++代码实现。BFS求解单源最短路径 & C++代码实现1 图解-BFS的单源最短路径求解过程1.1 算法流程的伪代码实现1.2 图解算法流程2原创 2021-10-30 14:51:03 · 2101 阅读 · 0 评论 -
数据结构-图【广度优先遍历图解&C++代码实现】
关于图的广度优先遍历(Breadth-First-Search,BFS)算法,具体原理在此不做阐述,仅是将该算法以流程图解形式给出,并结合算法原理给出C++的代码实现。图解BFS & C++代码实现1 BFS算法图解1.1 基本算法流程伪代码1.2 算法流程图解2 代码实现2.1 宏定义与头文件包含2.2 边表类-ArcNode2.3 顶点类-VNode2.4 邻接表类-ALGraph3 代码测试附:队列定义-LinkedQueue1 BFS算法图原创 2021-10-30 02:09:40 · 1006 阅读 · 0 评论 -
C++-线索二叉树【中序线索二叉树构造与遍历】
????????????,花了好几个个小时,看了线索二叉树的构造,感觉是挺简单的…但是,上手写中序线索二叉树的构造代码时,,,算法流程没错,代码没错,愣是构造不出来子树下面的右孩子结点对应的后继线索,后来设置了将其中的一个参数前置结点preNode作为类的成员变量拿出去,总算构造出来了。。。中序线索二叉树构造与遍历1 线索二叉树结点定义2 线索二叉树类定义3 代码测试4 测试结果1 线索二叉树结点定义#include <iostream>原创 2021-10-25 02:27:22 · 489 阅读 · 0 评论 -
C++-二叉树递归遍历与非递归遍历实现
-二叉树递归遍历与非递归遍历实现引言0 有关线性表结点定义-LinkNode1 栈的链式存储结构实现-LinkedStack2 队列的链式存储结构实现-LinkedQueue3 二叉树的链式存储结构实现3.1 树的结点定义-TreeNode3.2 二叉树定义3.3 前中后序遍历-递归算法实现3.4 前中后序遍历-非递归算法实现3.5 层序遍历算法实现4 代码测试5 测试结果引言 二叉树的遍历方法有:前序遍历、中序遍历、后序遍历、层序遍历,其中前中后序遍历又有原创 2021-10-24 19:15:33 · 3470 阅读 · 1 评论 -
数据结构-二叉树的创建与遍历
二叉树的创建与遍历1 二叉树结构图示2 代码编写2.1 树节点定义与前中后遍历算法实现2.2 二叉树定义3 二叉树创建与遍历输出1 二叉树结构图示&nsbp;&nsbp;&nsbp;&nsbp;要创建如下图所示的二叉树。2 代码编写2.1 树节点定义与前中后遍历算法实现class HeroNode{ private int no; private String name; private HeroNode lchild;//默认为null原创 2021-10-22 01:07:02 · 276 阅读 · 0 评论 -
C语言-串的定长顺序存储实现&BF暴力匹配算法
串的匹配,即:子串在主串中的检索操作,通常将子串在主串中第一次出现的位序作为返回值返回。头文件编写串的基本操作实现 此处选择定长顺序存储结构描述串,并对串的一些基本操作进行实现。#include <stdio.h>#include <stdlib.h>//最大容量#define MaxSize 255/*** 串-定长顺序存储实现*/typedef struct S原创 2021-10-17 16:39:57 · 589 阅读 · 0 评论 -
数据结构-稀疏矩阵的压缩存储实现-三元组
稀疏矩阵的压缩存储实现-三元组1 数据结构设计与头文件编写1.1 数据结构设计1.2 数据结构实现1.3 核心代码编写2 代码测试2.1 数据结构基本操作测试2.2 核心代码测试*3 头文件完整定义1 数据结构设计与头文件编写 这里偷个懒,把代码全部塞到头文件里面了,有需要的话将其做一下简单分割就好。1.1 数据结构设计 如上面图片中所叙述的那样,需要设计一个三元组数据结点,用于存放从稀疏矩阵中转换过来的三原创 2021-10-17 00:35:09 · 3026 阅读 · 0 评论 -
数据结构-3.3.6综合应用题1-括号匹配
1 题目描述 设有一个算术表达式S,其中包含圆括号、方括号、花括号3种类型的括号,编写一个算法实现括号匹配,用于判断表达式中的括号是否匹配,算术表达式为字符串类型,以’\0’作为结束符。2 代码编写2.1 链式栈#include <stdio.h>#include <stdlib.h>/*** 括号匹配[栈的应用]*///数据元素-数据类型typedef char ElemClass;//链式栈typedef原创 2021-10-16 18:41:19 · 190 阅读 · 0 评论 -
数据结构-3.2.6综合应用题1-附带tag标志域的循环队列
# 1 题目描述 若希望循环队列中的元素都能够得到利用,则需设置一个标志域tag,并以tag的值为0还是1,来区分队头指针front和队尾指针rear相同时的队列的状态是“空”,还是“满”,试编写与此结构相应的入队和出队算法。 # 2 基本思路 主要是队列为空、队列为满时的判断条件, [1]队空条件:Q->front==Q->rear&.原创 2021-10-16 17:20:55 · 695 阅读 · 0 评论 -
数据结构-3.2.6综合应用题2-队列与栈实现字母表逆置
1 题目描述 Q是一个队列,S是一个空栈,实现将队列中的元素逆置。2 基本思路 队列特点:先进先出; 栈特点:先进后出; 基本思路:将队列中的元素出队,同时在进栈,时间复杂度为O(n);然后将栈中的元素出栈,再入队,时间复杂度为O(n);即可得到逆序后的字母序列,总的时间复杂度为O(n)。3 代码编写3.1 头文原创 2021-10-14 23:05:43 · 670 阅读 · 3 评论 -
数据结构-3.1.5综合应用题4
1 题目描述 * 设单链表的表头指针为L,节点结构由data和next两个域构成,其中data域为字符型,设计算法判断链表的全部n个字符是否中心对称。 例如:xyx; xxyy; xxzyy2 代码编写2.1 单链表定义#include <stdio.h>#include <stdlib.h>/** * 设单链表的表头指针为L,节点结构由data和next两个域构成,其中data域为字符型,设计算法判断链表的全部n个字原创 2021-10-14 21:10:38 · 556 阅读 · 0 评论 -
C语言-共享栈基本操作复习
头文件编写#include <stdio.h>#include <stdlib.h>/***共享栈:使用数组实现 *///最大存储容量#define MaxSize 100//数据元素类型typedef int ElemType;//共享栈定义typedef struct SSqStack{ ElemType data[MaxSize];//存储数据元素 int top[2]; //1号栈顶指针[左端]、2号栈顶指针[右端]}SSqStack;/*原创 2021-10-14 20:22:13 · 168 阅读 · 0 评论 -
C语言-链栈基本操作复习
偷个懒,将函数声明与函数实现都写在头文件里面了。另外,链栈的数据元素结点定义和单链表的数据元素结点定义相同,但是由于栈是操作受限的线性表,因此,对于进栈、出栈操作,仅仅允许在首个元素节点位置进行。【此处链栈的实现,也预设了头结点】头文件编写与函数实现#include <stdio.h>#include <stdlib.h>//数据元素类型定义typedef int ElemType;//栈元素结点定义[形似单链表,预设头结原创 2021-10-13 01:12:25 · 159 阅读 · 0 评论 -
C语言-顺序栈基本操作复习
偷个懒,将函数声明与函数实现都写在头文件里面了。另外,此处预设栈顶指针的初始值为-1,如果设为0或者其它值,那么判断栈空和数据元素进栈以及出栈的基本操作if判断条件会有所不同。头文件声明&函数实现#include <stdio.h>#include <stdlib.h>//栈中最大元素数#define MaxSize 50typedef int ElemType;//数据元素类型//定义顺序栈typedef s原创 2021-10-13 00:36:15 · 114 阅读 · 0 评论 -
C语言-双链表基本操作复习
头文件声明#include <stdio.h>#include <stdlib.h>//元素类型定义typedef int ElemType;//头结点定义typedef struct DNode{ ElemType data;//数据域 struct DNode *prior,*next;//前驱结点指针&后继节点指针}DNode,DLinkedList;/*** 创建双链表*/void CreateDLinkedList(DLinkedLi原创 2021-10-10 19:32:50 · 120 阅读 · 0 评论 -
C语言-单链表基本操作复习
头文件编写#include <stdio.h>#include <stdlib.h>typedef int ElemType;//头结点定义typedef struct LNode{ ElemType data;//数据域 struct LNode* next;//指针域 }LNode,LinkedList; /** * 单链表初始化-头结点 */void CreateList(LinkedList* linkedlist);/** * 计算带有头原创 2021-10-10 16:57:04 · 86 阅读 · 0 评论 -
数据结构-选择排序之堆排序
下面分别为java语言与C语言的堆排序代码实现。1 Java代码实现@Testpublic static void HeapSort_test() { int arr[] = { -1, 49, 38, 65, 97, 76, 13, 27, 49 }; System.out.println("堆排序前"); InsertSort.printArray(arr, arr.length); HeapSort(arr, arr.length原创 2021-10-06 02:15:12 · 110 阅读 · 0 评论 -
C语言-BST二叉排序树的基本操作
太晚了,就先写一部分,剩下的白天再写。头文件声明与函数定义#include <stdio.h>#include <stdlib.h>typedef int ElemType;/*** 定义节点*/typedef struct BSTNode{ ElemType data;//数据域 struct BSTNode *lchild,//左孩子 *rchild;//右孩子}BSTNode;/*** 插入节点原创 2021-09-16 02:13:49 · 258 阅读 · 0 评论 -
C语言-串的堆分配存储表示与基本操作实现
接着上一篇《C语言-串的顺序存储表示与基本操作实现》,下面对串的堆分配存储表示与基本操作进行实现,在此不再使用strlen、strcpy等C函数库中提供的函数,【通过指针遍历等方式,结合malloc与free两个堆内存管理函数,自行编写相关操作代码】。相关代码如下,头文件声明#include <stdio.h>#include <stdlib.h>/** * 串的堆分配表示 */typedef struct { cha原创 2021-09-10 02:00:29 · 442 阅读 · 0 评论 -
C语言-串的顺序存储表示与基本操作实现
1 串的三种存储表示 串,即:字符串。要注意的是,C语言中是没有字符串数据类型的,而将其作为一种数据结构——“内容受限的线性表”进行实现,并对空串、空格串、串的长度、子串与主串等概念进行了约定【详见 《数据结构(C语言版)》 ,严蔚敏、吴伟民编著】。 串的存储表示主要分为三种, 【1】顺序存储表示 :使用字符型数组(一块连续的内存存储空间)来存储串的内容,其最大长原创 2021-09-07 01:42:46 · 2065 阅读 · 0 评论 -
C语言-链队列基本操作
队列的链式存储结构实现,相比于循环队列实现要复杂一些,但是没有队满的限制。头文件声明#include <stdio.h>#include <stdlib.h>/** * 队列的链式存储实现 * [带头结点的单链表] * [-类似于链栈,队列的链式存储实现也不会出现队满的情况] *///数据类型typedef int ElemType;//定义节点typedef struct SqQueueNode{ El原创 2021-09-04 02:02:15 · 737 阅读 · 1 评论 -
C语言-循环队列基本操作
循环队列依靠取模运算,实现队列中数据元素的逻辑成环操作。其相比队列的顺序存储实现,可以避免“假溢出”的问题。头文件声明#include <stdio.h>#include <stdlib.h>/** 循环队列实现*///数据元素上限#define MaxSize 50//定义数据类型typedef int ElemType;/*结构体定义*/typedef struct SqQueue{ ElemType原创 2021-09-04 01:12:42 · 491 阅读 · 0 评论 -
C语言-链栈基本操作
写代码着实会上瘾,是该克制一下了。。。下面是链栈的基本操作实现。 再啰嗦一句哈,对于链栈,其压栈操作无需考虑栈满溢出的问题,压栈操作的实质上就是线性表的“头插法”操作。头文件定义#include <stdio.h>#include <stdlib.h>/** * 栈的链式存储实现-在此不提供头结点 *///数据类型typedef int ElemType;//栈的节点原创 2021-09-02 02:09:43 · 1454 阅读 · 0 评论 -
C语言-顺序栈基本操作
栈,即操作受限的线性表[因为它只能在一端进行数据元素的插入和删除操作]。从存储结构角度,其具体实现可分为顺序栈和链栈。先搞个顺序栈的基本操作吧。头文件声明#include <stdio.h>#include <stdlib.h>/** * 顺序栈 *///数据类型typedef int ElemType;//宏定义-最大长度#define MaxSize 50/** * 结构体定义 */typedef原创 2021-09-02 01:26:23 · 333 阅读 · 0 评论 -
C语言-单链表基本操作
晚上睡不着,花十五分钟复习一下单链表的基本操作。代码如下,头文件声明#include <stdio.h>#include <stdlib.h>//数据类型typedef int ElemType;/** * 单链表节点 */typedef struct LNode{ ElemType data;//数据域 struct LNode* next;//指针域}LNode,*LinkedList;//函数声明原创 2021-08-30 01:44:29 · 272 阅读 · 1 评论