
数据结构
文章平均质量分 80
@大愚@
追光的人
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
栈
栈定义栈的顺序存储结构初始化的时候栈顶指针指向-1初始化的时候栈顶指针指向0共享栈栈的顺序存储的应用十进制转二进制回文数栈的链式存储结构带头结点不带头结点总结 定义 栈是一种受限的线性表,栈的逻辑结构任然是一对一的关系,但只能在栈顶进行插入和删除 特点:是先进去的最后出来 栈的顺序存储结构 初始化的时候栈顶指针指向-1 //栈 //顺序栈:此时top 指向 -1 #include <stdio.h> #include <stdlib.h> #define MaxSize 20原创 2021-05-23 11:02:53 · 453 阅读 · 0 评论 -
线性表
线性表顺序存储(又称为顺序表)静态分配空间动态分配空间 顺序存储(又称为顺序表) 特点是:逻辑上相邻的元素物理上也相邻(存储地址) 静态分配空间 #define MaxSize 10 typedef struct{ int data[MaxSize]; int length; }seqList; 宏定义了一个MaxSize 为8这个是线性表的总长度,这里面的length是线性表中被占用的长度即实际长度 但这样有一些不足,在静态分配时,由于数组的大小和空间事先都是固定的,一旦内存空间被占满,在加入新的数原创 2021-05-19 15:21:47 · 300 阅读 · 0 评论 -
数据结构:线性表
线性表 线性表的类型定义 线性表的顺序存储 线性表的链式存储 线性表的类型定义 具有相同数据类型的n个数据元素的有限集合 即第一个元素只有后继没有前驱,而最后一个元素只有前驱,没有后继,中间的每一个元素只有一个前驱和一个后继 顺序表在内存中的表示 线性表的顺序存储 线性表的顺序存储和数组的存储相似,只要知道他的存储空间或首地址就可以访问这些数据了 #include <stdio.h> #include <stdlib.h> typedef struct SqList{ int原创 2020-06-09 20:59:37 · 155 阅读 · 0 评论 -
数据结构:栈和队列
栈 栈是一种受限的线性表,栈的逻辑结构任然是一对一的关系。 为啥栈是一种受限的线性表了?? 因为栈只能在一端进行插入和删除 栈的存储结构 1,顺序存储结构 2,链式存储结构 1,顺序存储 #include <stdio.h> #include <stdlib.h> typedef struct SqStack{ int *base; int *top; int max; }SqStack; void InitStack(SqStack &s) { s.b原创 2020-06-08 23:19:16 · 274 阅读 · 0 评论 -
数据结构:串和数组
数组 一维数组:连续存储的同类型元素的集合 特点; 1,随机存取 2,长度不能改变 二维数组:每个元素受两个关系的约束,及行和列 内存中的存储(顺序开辟一块连续的空间存储) 1,行优先存储 2,列优先存储 行优先存储元素的位置(二维数组最后一个元素amn) 已知a11,aij = LOC(a11) + ((i - 1) * n + j - 1) * L 同理 列优先存储元素的位置 aij = LOC(a11) + ((j - 1) * m + i - 1)*L 例题 方法一LOC(2)(2) = LOC(原创 2020-06-07 09:27:00 · 801 阅读 · 0 评论 -
数据结构:树和二叉树
树和二叉树 树的定义和基本语句 二叉树 遍历二叉树和线索二叉树 树和森林 霍夫曼树及其应用 树的定义和基本语句 树是n个结点的有限集 树的表示方法 基本术语 根:即根节点(没有前驱) 叶子结点:即终端节点(没有后继) 森林:是有n棵树的集合 树的深度:所用节点层数中的最大值 二叉树 基本特点: 节点的度小于等于2 子树有序 二叉树的性质 1,在二叉树的第i层上至多有2^(i - 1)个结点(除叶子结点外,其余子树的度都为2) 2,深度为k的二叉树至多有2^k - 1个结点(总共的节点数) 3,对于任何原创 2020-06-06 08:36:48 · 7748 阅读 · 0 评论 -
数据结构:图的复习
图 图的定义和基本术语 图的存储结构 图的遍历 图的应用 图的基本概念 1,图的基本概念:G = (V,E) v是G的顶点集合(有穷非空) E是G的边的集合(有穷) 2,图的基本术语 有向图:有方向的图 无向图:没有方向的图 完全图:若x个顶点的无向图有x(x - 1) / 2条边称为无向完全图 …x(x - 1) …有向完全图 ...原创 2020-06-04 11:04:57 · 293 阅读 · 0 评论 -
拓扑排序
拓扑排序:是将AOV网中的各个顶点排成一个有序序列,序列中所有顶点都要满足弧尾在前,弧头在后 步骤:1,从有向图中选取一个没有前驱的顶点并输出 2,从有向图中删去此顶点以及所有以他为弧尾的弧 作用:用拓扑排序的方法可以判断图中是否有回路,如果对一个图可以完成拓扑排序,则此图不存在回路 ...原创 2020-05-27 16:37:40 · 401 阅读 · 0 评论 -
图的邻接矩阵的存储
#include <stdio.h> #include <stdlib.h> //<<邻接矩阵>> typedef struct MGraph{ int vexs[100];//由来存放顶点元素 int arcs[100][100];//用来存储两个顶点之间是否有边,有1,无0 int vexnum;//定点数 int arcnum;//边数 }MGraph; int Locate(int vexs[],int v,int vexnum)//返原创 2020-05-14 18:15:09 · 166 阅读 · 0 评论 -
霍夫曼树在内存中的存储
#include <stdio.h> #include <stdlib.h> /*思路:首先霍夫曼树在内存中存储包括四个部分:权值:weght,双亲:,左孩子,右孩子还要知道霍夫曼树的思想是权值大的路径短 *所以我们可以选取这里面权值最小的两个构成一对叶子结点,在以此类推就可以构建一个霍夫曼树 *我们通过观察霍夫曼树可以发现该树只有度为0的和度为2的两种,所以假设有n个叶子...原创 2020-05-07 20:15:52 · 790 阅读 · 0 评论 -
二叉树的基本操作
#include <stdio.h> #include <stdlib.h> typedef struct BiNode{ char data; struct BiNode *lchild; struct BiNode *rchild; }BiNode; typedef BiNode *BiTree; //创建二叉树 void CreateBiTree(BiTree ...原创 2020-04-26 18:13:12 · 357 阅读 · 0 评论 -
二叉树的遍历
我们的生活中有很多一对多的关系,比如你的族谱,我们这里以二叉树为例,如果你想修改其中的某一个值你肯定要知道这个值在哪个位置所以这就用到了二叉树的遍历 二叉树的遍历有三种形式:前序遍历,中序遍历,后序遍历 遍历的规则:前序遍历:先根结点,再左结点,再右节点 中序遍历:先左结点,再根结点,再右节点 前序遍历:先左结点,再右结点,再根节点 加粗样式 例如这道题 ...原创 2020-04-23 18:21:26 · 180 阅读 · 0 评论 -
稀疏矩阵的存储
#include <stdio.h> #define M 2 #define N 2 #define MAX 20 typedef int ElemType; typedef struct San{ int i; int j; ElemType v; }San; typedef struct Arrary{ int h;//总行数 int z;//总列数 int cou...原创 2020-04-16 20:28:13 · 149 阅读 · 0 评论 -
数据结构:新冠病毒检测
检测是采用字符串的查找即KMP算法 KMP算法的核心是求next[]数组 例如 所以代码如下 #include <stdio.h> #include <stdlib.h> #include <string.h> #define NAME "病毒" #define PASS "12345" typedef unsigned char String[256]; i...原创 2020-04-09 19:20:44 · 1817 阅读 · 1 评论 -
设表达式以字符形式已存入数组E中,‘#’为表达式的结束符,试编写出判断表达式中括号是否配对的程序
//这时利用了栈的特点 #include <stdio.h> #include <stdlib.h> typedef char ElemType; typedef struct SqList{ ElemType data; struct SqList *next; }SqList; typedef SqList *LinkList; //初始化 int InsiLis...原创 2020-04-08 19:34:27 · 1177 阅读 · 0 评论 -
数据结构:串的BF模式匹配算法的实际应用
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX 100 typedef unsigned char String[MAX + 1]; int StrLength(String n) { int i; for(i = ...原创 2020-04-02 20:52:55 · 538 阅读 · 0 评论 -
链队列:打印杨辉三角
#include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct SqQueue{ ElemType data; struct SqQueue *next; }SqQueue; typedef SqQueue *LinkQueue; typedef struct QueuePtr{ ...原创 2020-04-01 21:20:28 · 1698 阅读 · 3 评论 -
链队列的基本操作
入队在队尾 p -> data = e; p -> next = NULL;//因为在队尾入队所以入队后后继无数据为空 s.rear -> next = p; s.rear = p; 队列的出队是在队头进行的 p = s.froat -> next; e = p -> data; s.froat -> ...原创 2020-03-31 10:36:42 · 1049 阅读 · 0 评论 -
如何创建顺序队列
** 队列是一个线性表,但他的插入只能在队尾进行,删除只能在对头 /我们要表示一个队列,我们可以设置队列的指针我们通过对头和对尾来访问这个队列 typedef int ElemType; typedef struct SqQueue{ ElemType *base; int front; int seart; }SqQueue; 在执行入队操作时如果是队头指针并没有指向第一元素当尾指针到达...原创 2020-03-30 18:50:34 · 834 阅读 · 0 评论 -
栈的递归应用:汉诺塔
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘 我们以三个盘为例 思路:这个是把大盘放在目标柱的下方,所以我们要以最大的盘为研究对象,如果最大的盘可以放到目标柱...原创 2020-03-26 19:27:51 · 704 阅读 · 0 评论 -
数据结构:用栈写的迷宫小游戏
#include <stdio.h> #include <stdlib.h> #include <string.h> #define M 10 #define N 10 //typedef int ElemType; typedef struct PosType{ int x;//行号 int y;//列号 }PosType; typedef struct...原创 2020-03-24 19:43:56 · 1576 阅读 · 0 评论 -
进制转换器
#include <stdio.h> #include <stdlib.h> #include <math.h> #define MAX 10 #define ADD 10 typedef int ElemType; typedef struct SqStack{ ElemType *base; ElemType *top; int maxsizeof;...原创 2020-03-19 18:34:21 · 309 阅读 · 0 评论 -
栈的基本操作
栈是先进后出的也是一个受限的线性表 #include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct SqStack{ ElemType *base;//栈底指针 ElemType *top;//栈顶指针 int stacksize;//最大的空间 }SqStatck; //初...原创 2020-03-16 12:05:49 · 187 阅读 · 0 评论 -
用链表操作学生信息
#include <stdio.h> #include <stdlib.h> typedef struct Student{ int id; char name[10]; int score; }Student; typedef Student ElemType; typedef int Status; typedef struct Lnode{ ElemType ...原创 2020-03-10 09:50:17 · 1767 阅读 · 1 评论 -
数据结构:已知LA、LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按
#include <stdio.h> #include <stdlib.h> #define MAX 10 #define ADD 10 #define OVER -2 #define ERROR -1 #define OK 1 typedef int ElemType; typedef struct SqList{ ElemType *elem; int lengt...原创 2020-03-05 20:49:43 · 8768 阅读 · 3 评论 -
数据结构:存在于LB中而不存在于线性表LA中的数据元素插入到线性表LA中去。
#include <stdio.h> #include <stdlib.h> #define ERROR -1 #define OK 1 #define MAX 10 #define ADD 10 #define OVER -2 typedef int ElemType; typedef struct SqList{ ElemType *elem; int length...原创 2020-03-05 20:48:22 · 1099 阅读 · 1 评论 -
数据结构:新型冠状病毒登记表升级版
/*题目:新型冠病毒登记表 1,研究的对象是人 2,人与人是一对一的可以用线性表来表示 3,对象包括姓名,年龄,体温 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 10 #define OVER -2 #define OK 1 #define AD...原创 2020-03-03 19:03:36 · 482 阅读 · 0 评论 -
数据结构-新冠状病毒登记表
#include <stdio.h> #include <stdlib.h> #define MAX 10 #define OK 1 #define OVER -2 #define ADD 10 typedef struct Health{ char name[10]; int age; float heat; }Health; typedef Health El...原创 2020-03-02 18:38:22 · 477 阅读 · 0 评论 -
周记-数据结构篇
算法的时间复杂度的计算 1,找出语句频度最大的那条语句 2,计算基本语句的频度 3,直接写出时间复杂度 推导大O阶方法 1,用常数1取代运行时间中的所有加法常量 2 ,在修改后的运行次数函数中,只保留最高阶项 3,如果最高阶项存在且不为1,则去除与这个项相乘的常数。 例如:for(i = 1;i <= n;i ++) { for(j = 1;j <= n;j ++) { c[i][j]...原创 2020-02-29 22:41:35 · 473 阅读 · 0 评论 -
数据结构:顺序线性表删除:C语言实现
数据结构: /*初始条件:顺序线性表L已存在 操作结果:删除L的第i个数据元素,并用e返回其值,L长度- 1 */ Status ListDele(SqList *L,int i,ElemType *e) { int k; if(L -> length == 0) { return ERROR; } if(i > L -> length || i < 1) ...原创 2020-02-26 18:29:19 · 1769 阅读 · 0 评论 -
数据结构:顺序线性表插入C语言实现
数据结构:顺序表插入 /*初始条件:顺序线性表L已存在 操作结果:在L的第i个位置之前插入新的数据元素e,L的长度加一 */ Status ListInsert(SqList *L,int i,ElemType e) { int k; if(L ->length == MAXSIZE)//顺序表已经满了 { return ERROR; } if(i < 1 ||...原创 2020-02-26 17:13:46 · 2142 阅读 · 2 评论 -
将存在于B中而不存在于线性表A中 的数据元素插入到线性表A中去
/* 将存在于B中而不存在于线性表A中 的数据元素插入到线性表A中去 */ void sun(List *A,List B) { int A_len,B_len,i; ElemType e;//声明了一个与A,B相同的数据元素 e A_len = ListLength(*A); B_len = ListLength(B); for(i = 1;i <= B_len;i ++) ...原创 2020-02-25 17:12:31 · 772 阅读 · 0 评论 -
计算时间复杂度
**步骤:1,找出语句频度最大的那条语句作为基本语句 2,计算出基本语句的频度得到问题规模n的函数f(n) 3,直接写出时间复杂度T(n) = O(f(n)) 注意:如果有多层嵌套时时间复杂度由时间复杂度最深语句的频度决定的 方法:1 ∑方法 例如: for(i = 0;i <= n;i ++) { for(j = 1;j <= n;j ++) { c[i][j] = 0; for(k...原创 2020-02-24 11:55:16 · 590 阅读 · 0 评论 -
数据结构-特工名单
#include <stdio.h> //定义结构体的特工(研究对象) typedef struct{ char sex[10]; //性别 char name[10];//名字 int num; //代号 }people; //定义数据表数据类型(d,s,p) d:数据元素的集合,s关系,p:操作 //研究特工与特工的关系即一对一的关系即线性关系 typedef s...原创 2020-02-20 19:57:30 · 254 阅读 · 0 评论