数据结构
数据结构课程笔记
Lee Neo
稚晖的小迷弟。
展开
-
图的应用:最小生成树、最短路径、拓扑排序、关键路径
最小生成树:在图的所有生成树中,各边代价之和最小的那棵生成树称为最小代价生成树,简称最小生成树;利用MST性质构造的算法:Prim、KruskalPrim:初始u为v1,找v1的权值最小的边,<v1,v3>找与v1、v3连接的权值最小的边,<v3,v6>找与v1,v3,v6连接的权值最小的边,<v6,v4>找v1,v3,v6,v4连接的权值最小的边,<v3,v2>找v1,v3,v6,v4,v2连接的权值最小的边,<..原创 2021-10-12 22:56:35 · 491 阅读 · 0 评论 -
图的遍历:深度优先、广度优先
深度优先遍历(depth first search)类似于树的先根遍历;关于邻接矩阵表示的深度优先遍历算法:bool visited[vexnum]=FALSE;void DFS(AMGraph G,int v){ printf("%c",G.ver[v]);//访问第v个顶点; visited[v]=TRUE;//相应访问标志数组置为1; for(i=0;i<G.vexnum;i++){ if(G.arc[v][i]==1&&vis原创 2021-10-11 20:57:17 · 129 阅读 · 0 评论 -
图的存储结构:邻接矩阵和邻接表
图 graph顶点 vertex弧 arc弧尾 tail弧头 head有向图 digraph边 edge无向图 undigraph权 weight网 network邻接点 adjacent依附 incident度 degree出度 OutDegree入度...原创 2021-10-08 23:37:11 · 2074 阅读 · 0 评论 -
哈夫曼编码
构造哈夫曼树左0右1Status InitStack(SqStack *s) { s.base = (SElemtype*)mallco(MAXSIZE*sizeof(SElemtype)); s.top = s.base; return OK;}void CreatHuffmanCode(HuffmanTree HT,HuffmanCode *HC,int n){ //从叶子到根逆向求每个字符的哈夫曼编码,并存储在编码表HC中;...原创 2021-10-08 19:53:23 · 145 阅读 · 0 评论 -
哈夫曼树的构造
构造哈夫曼树typedef struct { int weight; int parent,lchild,rchild;}HuffmanTNode;void CreatHuffmanTree(HuffmanTNode *ht,int n){ int i; if (n<=1) return; HuffmanTNode ht[2n];//申请数组空间 for(i=1;i<=2n-1;i++){//初始化结点元素 ...原创 2021-09-29 22:51:43 · 124 阅读 · 0 评论 -
树、森林与二叉树的转换、遍历
树转换为二叉树口诀:兄弟相连留长子二叉树转换为树口诀:左孩右右连双亲 去掉原来右孩线树的遍历:思路:可套用二叉树遍历访问路径的方法,先根遍历即第一次经过时访问,后根遍历即最后一次经过时访问。森林遍历:...原创 2021-09-28 23:24:33 · 287 阅读 · 0 评论 -
树的存储结构
双亲表示法typedef struct PTNode{ Elemtype data; int parent;}PTNode;typedef struct { PTNode nodes[MAXSIZE]; int r,n;//根结点的位置和结点数}PTree;孩子表示法//孩子结点结构typedef struct CTNode{ int child; struct CTNode *nextsibling;//指向下一个兄弟结点}C原创 2021-09-28 22:14:09 · 81 阅读 · 0 评论 -
遍历算法应用:先序遍历建立二叉链表、 复制二叉树
先序遍历建立二叉链表typedef struct TreeNode{ Elemtype data; struct TreeNode *lchild,*rchild;}TreeNode;void CreateBiTree(Tree *t){ char ch; scanf("%c",ch); if (ch=='#') t=NULL;// else{ if(!(t=(TreeNode*)mallco(sizeof(TreeNod.原创 2021-09-27 23:16:13 · 3653 阅读 · 0 评论 -
遍历的三种算法——递归、非递归、层次
遍历二叉树 traversing binary tree原创 2021-09-26 23:16:44 · 3195 阅读 · 0 评论 -
由遍历序列确定二叉树
由先序和中序求二叉树由后序和中序求二叉树原创 2021-09-25 21:42:06 · 132 阅读 · 0 评论 -
遍历二叉树的三种方法
限定从左向右,分为先(根)序遍历,中(根)序遍历,后(根)序遍历要求:熟练先出三种遍历的结果原创 2021-09-25 17:19:45 · 95 阅读 · 0 评论 -
树、二叉树
树与二叉树:二叉树不是树的特殊情况;二叉树的每个结点至多有两颗子树;二叉树的子树有左右之分,且不能任意颠倒;二叉树的性质:在二叉树的第i层至多有个结点;深度为k的二叉树至多有个结点对于任意一颗二叉树,叶子数为n0,度为2的节点数n2,n0=n2+1;满二叉树:深度为k的含有个结点的二叉树;完全二叉树:每一个结点的编号都与相应满二叉树的编号(自上而下,自左向右)相同。从最后一个结点开始,连续去掉任意结点,还是完全二叉树;...原创 2021-09-25 16:47:19 · 88 阅读 · 0 评论 -
串、数组和广义表的比较
串:限定元素类型为字符的线性表数组:元素本身可以是线性表的线性表广义表:元素类型剋是线性表、数组、树、图等数据结构;数组存储时的地址计算特殊矩阵的压缩存储方法原创 2021-09-25 10:44:05 · 419 阅读 · 0 评论 -
串定义、KMP算法
串的顺序存储#include "datastr.h"#define MAXLEN 255typedef struct { char ch[MAXLEN+1]; int length;}SString;堆式顺序存储typedef struct { char* ch; int length;}HString;链式存储#define CHUNKSIZE 80typedef struct Chunk { char ch[CHUNKSIZE]; struct Chun原创 2021-09-24 20:27:34 · 71 阅读 · 0 评论 -
链队的基本操作
队列的链式存储结构typedef struct QNode { ElemType data; struct QNode* next;}QNode,*QueuePt;typedef struct { QueuePt front; QueuePt rear;}LinkQueue;初始化Status InitQueue(LinkQueue* q) { q->front = q->rear = (QueuePt)malloc(sizeof(QNode));//申请空结点.原创 2021-09-20 23:12:25 · 98 阅读 · 0 评论 -
循环顺序队列基本操作
队列 queue先进先出 first in first out ,FIFO队尾 rear队头 front顺序结构sequence队空条件:q->front == q->rear队满条件:(q->rear+1)%MAXSIZE==q->front存储结构#include"datastr.h"//#define MAXSIZE 100typedef struct { E...原创 2021-09-20 17:33:19 · 271 阅读 · 0 评论 -
链栈的基本操作
链栈不是顺序存储,因此弹出后需要释放空间;链栈存储结构#include "datastr.h"typedef struct StackNode { ElemType data; struct StackNode* next;}StackNode,*LinkStack;初始化Status InitStack(LinkStack S) { S = NULL; return OK;}进栈Status Push(LinkStack S, ElemType e) { ..原创 2021-09-20 09:38:42 · 99 阅读 · 0 评论 -
顺序栈的进栈、出栈
栈 stack栈顶 top栈底 bottom后进先出 Last In First Out,LIFO指针相减得到中间差的元素个数;结构体变量也可以作为函数参数,但修改后不会返回给主调函数;顺序栈初始化typedef struct { SElemtype* base; SElemtype* top; int stacksize;}SqStack;Status InitStack(SqSta...原创 2021-09-19 23:30:18 · 274 阅读 · 0 评论 -
双向链表的插入、删除
双向链表 Double Linked List插入s->data = e; s->proir = p->proir;p->proir->next = s; s->next = p;p->proir=s;删除 p->proir->next = p->next; p->next->proir = p->proir;双向链表插入#...原创 2021-09-19 16:54:30 · 212 阅读 · 0 评论 -
大话数据结构-单链表勘误,计划调整
按照之前的规划,参考《大话》来学习,但发现其中的有些代码比较让人疑惑,本来很简单的,我也都懂的,但是看完书上的代码就晕了,非常影响学习的进度和状态。读到单链表确实有点受不了,于是上网查了发现网友已经列出这本书的很多小错误,但对于单链表这边快还没有发现,遂提出:书中对于单链表的存储结构定义如下:typedef struct Node { Elemtype data; struct Node* next;}Node;//定义结点typedef struct Node* Link.原创 2021-09-19 11:03:51 · 568 阅读 · 2 评论 -
线性表的插入和删除
线性表 linear list数据项 item记录 record文件 file顺序映像 sequential mapping结点 node线性表的顺序存储结构插入和删除步骤1:合法性检查(指针,位置i)2:遍历找到位置3:建立新结点(mallco),插入或者删除结点;Tip:元素插入需后移,用--遍历元素删除需前移,用++遍历#define MAXSIZ...原创 2021-09-15 23:26:31 · 2327 阅读 · 0 评论 -
1数据结构绪论:算法时间复杂度 2021/9/14
算法时间复杂度时间复杂度即是函数执行次数的最高项,关系如下图所示:小体会:对于数据结构,感觉主要是在c语言基础上的应用,就像已经学完了加减运算后的练习题一样;这部分自己看书的话可以看的懂,且更加方便思考。自己一开始也选择了看视频课,但是感觉视频课讲得很慢,而且还要跟着老师的思维,觉得很累且效率很低。因此后面我尝试看书学习,效果很好。 看书的方法是首先全部看一遍,有个大概的印象,后面在仔细研读。学习计划:先按照《大话数据结构》(通俗易懂易读)将数据结构敲一遍代码,严...原创 2021-09-14 23:19:06 · 119 阅读 · 0 评论