
数据结构
学习
weixin_45782139
这个作者很懒,什么都没留下…
展开
-
树5.5——赫夫曼树(链式)
找了一圈发现网上大部分赫夫曼树都是顺序存储,记录一下使用指针的赫夫曼树。#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXSIZE 1000 typedef struct huffNode{ char data; int weight; struct huffNode *lch,*rch,*parent;}huffNode,*huffTree;typedef struct原创 2021-08-13 18:14:42 · 127 阅读 · 0 评论 -
图1——图的五种存储结构及其初始化
零、说明本文中,V代表Vertex,即顶点,E代表Edge,即边。什么Vnum,Enum,firstE都按照这个来理解。原理我是按《大话数据结构》来的,我也解释不好这个原理,就不献丑了存储方式还远不止这些,有个好像叫前向星,我现在还不会(流下了菜鸡的眼泪)一、邻接矩阵数据类型typedef struct { char Vertex[MAXSIZE]; int Edge[MAXSIZE][MAXSIZE]; int Vnum,Enum;}MGraph;//叫MGraph是因为矩阵原创 2020-09-08 11:38:29 · 1464 阅读 · 0 评论 -
树5——赫夫曼树
零、说明这个程序包括①通过输入建立赫夫曼树(哈夫曼树)②输入一串字符串,能得到其赫夫曼编码,输入一串赫夫曼编码,也能得到其原始字符串,有能实现这两个功能的两个函数思路是下面这个博主的,在此表示感谢:NOJ-哈夫曼编/译码器原题目:不过为了以后复习时看得懂,我修改了输入方式:并且由于中间步骤不同,最后输出的编码序列也不同,是由于同编码的赫夫曼树不止有一棵,如果两个节点权值相同,两个的左右位置可以交换一、数据类型上学期写这个实验的时候我用的是指针*lch,*rch,非常费原创 2020-08-21 15:23:46 · 657 阅读 · 0 评论 -
树4——二叉树的线索化
零、说明线索化有点复杂,仔细看,画图线索化意义在于充分利用空置指针,以提高遍历的效率完成后,遍历二叉树相当于遍历一个双向循环链表(以下说的是是中序遍历)①头节点左指针 指向 树的根节点,右指针 指向 遍历的最后一个节点。②树中,遍历的第一个节点的左指针 指向 头节点,③原来的左空指针指向上一个遍历到的节点,右空指针指向下一个遍历到的节点④最后一个遍历到的节点的右指针指向头节点头节点->根节点->…中序遍历到的第一个节点->…遍历的最后一个节点 ↑-----------原创 2020-08-19 17:51:18 · 212 阅读 · 0 评论 -
树3——二叉树(链式)
零、说明原创 2020-08-18 23:06:20 · 85 阅读 · 0 评论 -
树2——二叉树(顺序)
零、说明顺序存储结构最好用于完全二叉树(普通树也可以,把空节点数据设为^即可),链式存储结构任何二叉树都可以性质:①第i层最多有2i-1个节点,前i层最多有2i-1个节点②零度顶点=二度顶点+1③n个顶点的完全二叉树深度为[log2n]+1④对一棵完全二叉树编号为i的节点,(i)若i=1,则无双亲,否则双亲是[i/2](ii)i<=(n-1)/2 有左有右(n-1)/2<i<=n/2 有左无右i>n/2 无左无右一、数据类型顺原创 2020-08-18 21:08:57 · 168 阅读 · 0 评论 -
树1——树的几种存储结构
零、说明只包括初始化代码,其他功能有待后续再写不知道正不正确,不过没有error和warning一、双亲表示法(Parent)每个树的节点存储它的双亲节点的下标,这样就能一层一层上溯。下列是Pro版,还加上了firstchild和rigntsibling,可以更轻易地得到某个想要的节点。不过原始的双亲表示法可以只有int parent纯用顺序结构,叠了两层结构体typedef struct { int data; int parent,firstchild,rightsibli原创 2020-08-16 10:17:20 · 336 阅读 · 0 评论 -
字符串1——常用函数
零、说明字符串就是用数组存储一连串用字符表示的信息操作和其他数据结构不同,字符串的每个单位不是其他数据结构的节点,而是字符数组的每位,所以算法理解起来有一点难度。有些函数看起来还挺长的,不过慢慢理解之后会发现其实不难由于并非必须,下列函数没有检测输入数据是否正确符合规范没有越界,需要输入自行确定一、数据类型typedef char String[MAXSIZE+1];使用《大话数据结构》中的做法,String的第0位存储字符串长度,第1到第MAXSIZE位存储数据String[MAXS原创 2020-08-14 21:34:42 · 210 阅读 · 0 评论 -
栈和队列5——链队列
零、说明在链队列中,head指向头节点,但是实际的head是head指向的节点,即第一个有元素的节点tail在循环队列中指向空位置,但是在链队列中,tail指向最后一个节点一、数据类型和链栈一样采取两个结构体的形式typedef struct Queuenode{ int data; struct Queuenode *next;}Qqueuenode,*Queueptr;typedef struct Linkqueue{ Queueptr head,tail; int nu原创 2020-08-06 17:36:42 · 100 阅读 · 0 评论 -
栈和队列4——循环队列
零、说明队列就是一种只能尾进头出的线性表,想象在排队注意:由于队头指向元素,队尾指向队列最后一个元素后面的空位置空间,所以一个大小为n格的顺序队列,其真实可以存储的大小为n-1而不能存n个数据一、数据类型typedef struct Linequeue{ int data[MAXSIZE]; int head,tail;}Linequeue;二、初始化void Initial(Linequeue *Q){ Q->head=0; Q->tail=0; }三、入原创 2020-08-06 10:49:06 · 175 阅读 · 0 评论 -
栈和队列2——两栈共用空间
零、说明两栈共用空间是为了解决顺序栈未满时只能利用部分空间的现象,让两个栈分别以数组头部和尾部作为栈底,向中间延伸,直到在中间相遇,即相当于两个栈都满了事实上和顺序栈没什么两样,不过是要新增一个函数参数用于识别在哪个栈进行操作和顺序栈一样,为了在函数中修改结构体内容,函数参数为结构体指针一、数据类型typedef struct Doublestack{ int data[MAXSIZE]; int top1,top2;}Doublestack;二、初始化void Initial(原创 2020-08-06 09:57:52 · 221 阅读 · 0 评论 -
栈和队列3——链栈
零、说明与顺序栈相比优点在于空间不受限注意:栈的每一层指向它的下面的一层一、数据类型由于第一个结构体只是栈的每一层,没法加入top,所以采用两个结构体,下面包含上面typedef struct Stacknode{ int data; struct Stacknode *next;}Stacknode,*Stackptr;typedef struct Linkstack{ Stackptr top;//指向栈顶 int num;//栈中元素的数量 }Linkstack;原创 2020-08-05 21:22:31 · 93 阅读 · 0 评论 -
栈和队列1——顺序栈
零、说明栈是一种特殊的线性表:相当于一个桶,先进去的东西在下面,后出来注意,顺序栈使用结构体,结构体做函数参数时函数不能修改结构体内容,所以用指针一、数据类型typedef struct Linestack{ int stack[MAXSIZE]; int top;}Linestack;二、初始化top指向栈顶元素,现在栈中没元素,指向0也不行,所以指向-1void Initial(Linestack *S){ S->top=-1;}三、入栈出栈入栈voi原创 2020-08-05 20:20:33 · 172 阅读 · 0 评论 -
线性表3——静态链表
零、说明产生原因:某些早期语言没有指针,同时想使用链表的功能原创 2020-08-04 23:48:54 · 241 阅读 · 0 评论 -
线性表2——双向循环链表
一、数据类型typedef struct Node{ int data; struct Node *prev,*next;}Node,*llist;原创 2020-07-23 16:56:37 · 93 阅读 · 0 评论 -
线性表1——顺序表
...原创 2020-07-18 18:29:51 · 86 阅读 · 0 评论