数据结构
西海岸看日出
东北大学
展开
-
最长公共子序列和最长公共子串——C++
一、给定两个字符串S1和S2,求两个字符串的最长公共子序列的长度。输入样例ABCDAEBD输出样例3解释S1和S2的最长公共子序列为ABD,长度为3思路动态规划LCS(m,n)表示S1[0…m]和S2[0…n]的最长公共子序列的长度S1[m] == S2[n]: LCS(m, n) = 1 + LCS(m - 1, n - 1);S1[m] != S2[n]: LCS(m, n) = max(LCS(m - 1, n), LCS(m, n - 1))。#inc原创 2020-10-06 17:26:42 · 1135 阅读 · 0 评论 -
快速排序——C语言实现
一、排序算法的基本分类:插入排序类:直接插入排序--------(改进)-------->希尔排序选择排序类:简单选择排序--------(改进)-------->堆排序交换排序类:冒泡排序--------(改进)-------->快速排序二、快速排序算法基本思想:利用分治法的思想,在序列中任选一个记录作为基准(由自己设定),以此基准将当前无序序列划分为左、右两个较小的...原创 2020-04-20 22:32:38 · 634 阅读 · 0 评论 -
归并排序——C语言实现
归并排序是利用归并的思想实现的排序方法。它的原理是假设初始化序列中有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1。然后两两归并,得到(n/2 + n% 2)个长度为2或1的有序子序列;再两两归并,…,如此重复,直到得到一个长度为n的有序序列为止,这种排序方法称为2路归并排序。一般用的归并排序就是2路归并排序。过程如下图所示:归并排序可以由递归实现,也可以由迭代实现。一、归并...原创 2020-04-20 11:29:02 · 387 阅读 · 0 评论 -
堆排序——C++实现
堆排序算法的步骤:例如大顶堆1、首先将要排序的数组构造成一个大顶堆,数组本身可以看作是一个完全二叉树的顺序存储结构,构建大顶堆是一个从下至上进行筛选的过程,从最后一个非终端结点(N/2)开始(当数组元素是从下标1开始存储的,最后一个非终端结点的下标就是N/2)。如果发现左右子结点的值大于父结点,则将两者互换,对每一个非终端结点筛选完成后就形成了一个大顶堆。2、取出堆首元素(此时为最大的元素)...原创 2020-04-18 16:28:06 · 307 阅读 · 0 评论 -
二叉排序树(二叉搜索树,二叉查找树)详细代码实现
//二叉排序数(二叉搜索树,二叉查找树)#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>using namespace std;#define end 32767 // 定义结束标志//结点结构typedef struct BiTNode{ int data; struct BiTNode *lchild, *...原创 2020-04-13 18:05:31 · 1331 阅读 · 0 评论 -
马踏棋盘(骑士周游问题)——回溯法
如图,在8*8国际象棋棋盘中,马的走法有八种。问题随便规定棋盘上的一点(如(2,0)),马开始走,由此点开始,走遍棋盘上的其他63个格子的路径,求此路径。思路用回溯法,一条路走下去,碰到死路就回头走,用到递归(类似于图的深度遍历);设计一个nextxy()函数,用来判断下面的八个点哪一个能走;print函数,输出位置;递归函数TracelChessBoard(),用tag来作为标...原创 2020-04-09 20:24:59 · 885 阅读 · 0 评论 -
双向链表 C语言实现
有头结点的双向链表如下图所示://双向不循环链表,有头结点#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<iostream>using namespace std;typedef int el...原创 2020-03-19 17:28:47 · 213 阅读 · 0 评论 -
哈希表的创建、插入与查找——C语言简单实现
小甲鱼数据结构课程的改良版://散列表(哈希表)的创建、初始化、插入与查找#include<stdlib.h>#include<iostream>using namespace std;#define HASHSIZE 13#define NULLKEY -32456 //哈希表初始化的值//定义哈希表结构typedef struct{ in...原创 2020-02-17 17:02:17 · 6638 阅读 · 0 评论 -
基于邻接表的图遍历方式(深度优先+广度优先)—C语言
深度优先遍历: 类似与树的前序遍历。从图中的某个顶点v出发,访问此顶点,然后从v的未被访问到的邻接点进行遍历,直到图中所有和v有路径相通的顶点都被访问到(注:优先访问外层节点,访问到无新顶点时,会进行回退,访问未被访问过的分支顶点)。广度优先遍历: 类似于树的层序遍历。从图中的某个顶点w出发,让顶点w入队,然后顶点w再出队,并让所有和顶点w相连的顶点入队,然后再出队一个顶点t,并让所有和t相连但...原创 2019-09-25 20:30:13 · 7448 阅读 · 0 评论 -
基于邻接矩阵的图遍历方式(深度优先+广度优先)—C语言
深度优先遍历: 类似与树的前序遍历。从图中的某个顶点v出发,访问此顶点,然后从v的未被访问到的邻接点进行遍历,直到图中所有和v有路径相通的顶点都被访问到(注:优先访问外层节点,访问到无新顶点时,会进行回退,访问未被访问过的分支顶点)。广度优先遍历: 类似于树的层序遍历。从图中的某个顶点w出发,让顶点w入队,然后顶点w再出队,并让所有和顶点w相连的顶点入队,然后再出队一个顶点t,并让所有和t相连但...原创 2019-09-25 20:24:05 · 23394 阅读 · 6 评论 -
图的邻接表存储—C语言
邻接表对应的,我们得到如下的结构:我们以无向图为例:写出相应的邻接矩阵:程序实现://图的邻接表方式存储—需要顶点表和边表。//顶点表包括整型/字符型结构的元素(顶点自身的值)和边表结构类型的指针;//边表包括整型/字符型结构的元素(顶点下标或权值)和本身结构体类型的指针;#define _CRT_SECURE_NO_WARNINGS#include<stdio.h...原创 2019-09-23 20:34:37 · 1982 阅读 · 0 评论 -
图的邻接矩阵存储—C语言
代码实现://图的邻接矩阵存储结构—用两个数组来表示图,一个一维数组存储图中的顶点信息,一个二维数组(称为邻接数组)存储图中的边或弧的信息。#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <iostream>#define MAX_VERTI...原创 2019-09-23 15:07:33 · 2629 阅读 · 1 评论 -
线索二叉树—C语言实现
线索二叉树的定义如下:https://www.jianshu.com/p/3965a6e424f5程序实现://线索二叉树#define _CRT_SECURE_NO_WARNINGS#include <stdlib.h>#include <stdio.h>typedef char ElemType;typedef struct BITNODE //二叉树...原创 2019-09-19 16:20:53 · 502 阅读 · 0 评论 -
二叉树链—C语言实现
二叉树的具体定义如下:https://www.jianshu.com/p/bf73c8d50dc2代码实现://二叉树链—二叉树的链表描述#define _CRT_SECURE_NO_WARNINGS#include <stdlib.h>#include <stdio.h>typedef char ElemType;typedef struct BITNO...原创 2019-09-19 16:14:06 · 313 阅读 · 0 评论 -
C++ 顺序表的类实现
1、顺序表的定义将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构,采用顺序存储结构的线性表简称为“ 顺序表”。 顺序表的存储特点是:只要确定了起始位置,表中任一元素的地址都通过下列公式得到:Loc(ai)=Loc(a1)+(i−1)∗L,1≤i≤n其中,L是元素占用存储单元的长度。2、顺序表的基本操作(1)初始化:建立一个空的顺序表;(2)新建:新建一个顺序表;...原创 2019-08-30 15:57:57 · 2603 阅读 · 0 评论 -
C++单链表的类实现
#include<iostream>using namespace std;template<class DataType>struct Node{ DataType data; Node<DataType> *next;};template<class DataType>class LinkList{publi...原创 2019-08-30 16:12:11 · 829 阅读 · 0 评论 -
单链表 c实现
转自 https://blog.csdn.net/sinat_40477296/article/details/78877547#include <stdio.h>#include <stdlib.h>#include <time.h>//创建单链表的成员 其实就是结点//link p; p就是一个结点typedef struct Link...转载 2019-09-02 21:07:38 · 129 阅读 · 0 评论 -
静态链表C语言实现
#include<iostream>using namespace std;#define MAXSIZE 100typedef int ElemType;//定义静态链表存储结构typedef struct Node{ ElemType data; int cur;} StaticLinkList[MAXSIZE];//对静态链表进行初始化相当于初始化数组...原创 2019-09-03 17:52:56 · 941 阅读 · 0 评论 -
循环链表 C实现
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>typedef struct List{ int data; struct List *next;}list;void creat_list(list **p)//如果链表为空,则创建一个链表,指针域指向自己,否则寻找尾...原创 2019-09-04 15:17:22 · 216 阅读 · 0 评论 -
双向循环链表 C语言实现
双向循环链表的存储结构:双向链表也是采用的链式存储结构,它与循环链表的区别就是每个数据结点中多了一个指向前驱元素的指针域 ,可以有头结点,也可以没有。它的存储结构如下图:当只有头结点时:具体代码实现://双向循环链表,有头结点#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>...原创 2019-09-05 16:19:20 · 371 阅读 · 0 评论 -
栈的顺序存储结构——C实现
//栈的顺序存储结构,C语言实现//栈的建立、销毁、压栈、出栈、取栈顶元素操作#include<stdio.h>#include<stdlib.h>#include<time.h>#include<iostream>using namespace std;#define STACK_INIT_SIZE 10 //栈的总存储容量...原创 2019-09-09 15:16:20 · 225 阅读 · 0 评论 -
栈的链式存储结构——C语言
链式存储结构最大的好处就是没有空间的限制,通过指针指向将结点像一个链子一样把结点链接,那么栈的同样可以用于链式存储结构。栈因为只是栈顶来做插入和删除操作,所以比较好的方法就是将栈顶放在单链表的头部(与顺序栈相反),栈顶指针和单链表的头指针合二为一。另外栈顶在头部了,那么单链表的头结点也就失去了意义,通常对于链栈来说,是不需要头结点的。同样对于链栈来说,基本不存在栈满的情况,除非内存已经没有可...原创 2019-09-09 21:31:29 · 375 阅读 · 0 评论 -
逆波兰计算器——完整版C实现
1、什么是逆波兰表达式?其定义为:https://baike.baidu.com/item/%E9%80%86%E6%B3%A2%E5%85%B0%E8%A1%A8%E8%BE%BE%E5%BC%8F/9841727?fr=aladdin逆波兰表达式又称为后缀表达式,这是计算机喜欢的输入形式。2、逆波兰计算器实现逆波兰计算器要分为两个步骤:(1)、将算数表达式(中缀表达式)转换为逆波兰...原创 2019-09-11 17:54:20 · 2466 阅读 · 1 评论 -
队列的链式存储结构——C实现
队列的链式存储结构。队列常用链表来实现,简称为链队列。本次设计的链队列有头结点,并且队首指向头结点,队尾指向链尾结点。队列是先进先出的线性表,在队尾那一端插入元素,在队首那一端删除元素。c语言代码:#define _CRT_SECURE_NO_WARNINGS#include<stdlib.h>#include<stdio.h>typedef char El...原创 2019-09-14 14:38:45 · 339 阅读 · 0 评论 -
队列的顺序存储结构——C实现
队列的顺序存储结构——数组实现;如果每次删除一个队列元素时,都需要把剩余元素左移一个位置,则时间复杂度会增加为O(n);如果每次删除一个队列元素,只把队首加1,时间复杂度会减少为O(1),但无法用到队首之前的空间;对于队列的顺序存储结构,一般采用循环队列,把数组视为一个环,把数组的两端连接。可以同时解决上述两个问题;但为了避免无法判断队列是空还是满,队列不能插满。代码实现:#defin...原创 2019-09-14 16:48:02 · 548 阅读 · 0 评论 -
C++ 线性表的结构体定义(顺序表和链式表)
线性表的结构体定义:1、顺序表的结构体定义typedef struct { int data[maxSize]; int length; } Sqlist;2、单链表结点的结构体定义typedef struct LNode{ int data; //存放结点数据域 struct LNode *next; //指向后继结点的指针 }LNode...原创 2019-08-30 15:51:02 · 2891 阅读 · 0 评论