王道考研数据结构(含上机实验)
王道论坛数据结构的视频及教辅书的编程实现
非洲蜗牛
这个作者很懒,什么都没留下…
展开
-
图的应用(理论)
1.带权路径长度:2.实例:原创 2021-09-26 20:30:06 · 274 阅读 · 0 评论 -
链式二叉树的构造、遍历及测量高度(C/C++实现)
代码实现:原创 2021-06-01 14:35:29 · 152 阅读 · 0 评论 -
线索二叉树的介绍
1.中序线索二叉树:(1)已知一棵二叉树和它的中序遍历序列:(2)对该二叉树进行改造,如图:注意:这里的前驱和后继指的是遍历序列中的前驱和后继,而不是存储结构的前驱和后继。这个改造也就是“线索化”,如图:(3)线索二叉树和普通二叉树的结点的基本数据类型定义:(4)中序线索二叉树的存储结构实例:2.先序线索二叉树的存储结构示例:3.普通二叉树线索化成后序线索二叉树:后续线索二叉树存储结构:...原创 2021-06-01 11:57:02 · 58 阅读 · 0 评论 -
由遍历序列构造二叉树(理论)
原创 2021-05-24 14:21:19 · 286 阅读 · 0 评论 -
王道数据结构第44页第25题(较难)
题目要求:我的代码实现:原创 2021-05-15 20:28:43 · 218 阅读 · 0 评论 -
王道数据结构第96页第1题
题目要求:我的代码实现:原创 2021-05-14 20:44:18 · 70 阅读 · 0 评论 -
王道数据结构第96页第2题
题目要求:思路:先把这列火车当成是一个由‘H’和‘S’所组成的字符串,首先编写算法,能够使所有的’S’都在‘H’前面,代码如下:#include<stdio.h>#include<string.h>#define ElemType char#define MaxSize 100typedef struct{ ElemType data[MaxSize]; int top;}Stack;void InitStack(Stack &S){ memse原创 2021-05-14 19:49:24 · 94 阅读 · 0 评论 -
王道数据结构第96页第3题
题目要求:参考了王道的书和视频,实现的代码如下:#include<stdio.h>#define MaxSize 100double P(int n,double x){ struct stack{ int no; double val; }st[MaxSize]; int top=-1,i; double fv1=1,fv2=2*x; for(i=n;i>=2;i--) //模拟函数递归调用的入栈过程 { top++; st[top].no原创 2021-05-14 18:22:20 · 102 阅读 · 0 评论 -
王道数据结构第97页第4题
题目要求:我的代码实现:(1)顺序队列实现:#include<stdio.h>#include<string.h>//顺序队列基本数据类型定义:#define ElemType char#define MaxSize 50 typedef struct{ ElemType data[MaxSize]; int front,rear;}SqQueue;void InitQueue(SqQueue &Q){ memset(Q.data,'\0',原创 2021-05-09 23:37:57 · 88 阅读 · 0 评论 -
王道数据结构第86页第4题(不好理解的一个题)
题目要求:总结:(1)由“入队时,允许增加队列占用空间”可知,应使用链式存储结构,因为此条件意味着即使当前队满,队列的存储空间也能增加,而顺序存储结构的最大元素个数是事先就规定好的,故无法达到这一点,使用链式存储结构便于达到,故选择链式结构。(2)为了重复利用存储空间,采用循环单链表的结构,初始状态如图:其中front为队头指针,rear为队尾指针,则:队空时,front==rear;队满时,rear->next==front;(3)第一个元素入队之后的队列状态:(4)略这道题原创 2021-05-09 19:26:13 · 113 阅读 · 0 评论 -
王道数据结构第85页第3题(使用栈来模拟队列)
题目要求:我的代码实现:(1)两个顺序栈:(2)两个链栈:原创 2021-05-09 15:08:48 · 80 阅读 · 0 评论 -
王道数据结构第85页第2题
题目要求:我的代码实现:(1)顺序栈和顺序队列:#include<stdio.h>#include<stdlib.h>#define ElemType int#define MaxSize 20//顺序队列的基本数据类型定义:typedef struct{ ElemType data[MaxSize]; int rear,front;}SqQueue;//顺序栈的基本数据类型定义:typedef struct{ ElemType data[MaxS原创 2021-05-07 21:43:50 · 81 阅读 · 0 评论 -
王道数据结构第85页第1题
题目要求:我的代码实现:(顺序队列)#include<stdio.h>#include<stdlib.h>//队列基本数据类型定义 #define ElemType int#define MaxSize 15typedef struct{ ElemType data[MaxSize]; int rear,front,tag;}SqQueue;void InitQueue(SqQueue &Q){ Q.front=Q.rear=0; Q.tag原创 2021-05-07 20:18:28 · 44 阅读 · 0 评论 -
二叉树的先中后序层序遍历(理论)
1.遍历:按照某种次序把所有的结点都访问一遍;2.先中后序遍历:3.先序遍历代码:4.中序遍历代码:5.后序遍历代码:注意:在三种遍历当中,每个结点都会被路过三次,但路过不等于访问。在三次路过中,只有一次进行了访问。应用实例:求树的深度:...原创 2021-05-01 11:40:15 · 111 阅读 · 0 评论 -
二叉树的存储结构(理论)
1.二叉树的顺序存储:(1)基本数据类型定义及初始化:(2)顺序存储下的基本操作:如果这棵树是完全二叉树的话:(3)非完全二叉树的二叉树怎么顺序存储:但是如果你想知道某个节点有没有左孩子或右孩子,用完全二叉树那一套就不行了,就只能用基本数据类型定义里的成员变量isEmpty来判断了。缺点:使用顺序存储来存储二叉树会导致空间的很大浪费,下面这种尤其如此:(所以这种存储结构很少用)2.二叉树的链式存储:(1)基本数据类型定义及图示:(2)链式二叉树的构建:如果经常需要找父节点原创 2021-05-01 10:00:40 · 171 阅读 · 1 评论 -
王道数据结构第71页第四题
题目要求:我的代码实现:#include<stdio.h>#include<stdlib.h>#include<string.h>#define MaxSize 100 #define ElemType chartypedef struct LNode{ ElemType data; struct LNode* next;}Node,*LinkList;//头插法构造单链表:LinkList List_HeadInsert(LinkList原创 2021-04-30 15:35:40 · 125 阅读 · 0 评论 -
王道数据结构第71页第5题
题目要求:我的代码实现:#include<stdio.h>#define MaxSize 20#define ElemType int//定义存储区: ElemType data[MaxSize]={0};//栈的基本数据类型定义: typedef struct stack{ int top;}Stack;Stack S1,S2;//初始化: void InitStack(Stack &S,int e){ if(e==1)S.top=-1; els原创 2021-04-30 13:20:04 · 230 阅读 · 0 评论 -
二叉树的常考性质
(1)(2)(3)(4)(5)(6)原创 2021-04-30 09:57:41 · 81 阅读 · 0 评论 -
王道数据结构第70页第26题
题目要求:对第一条的判断:原创 2021-04-29 13:22:40 · 66 阅读 · 0 评论 -
王道数据结构第70页第25题
总结一下,就是:(1)栈根本就不存在下溢的情况(2)减少存取时间是不存在,因为存取操作的时间复杂度本来就是O(1)(3)共享栈能节省存储空间,降低发生上溢的可能原创 2021-04-29 12:48:12 · 400 阅读 · 0 评论 -
二叉树的定义与基本概念
什么是二叉树:二叉树的五种状态:满二叉树:完全二叉树:有一点需要注意,在完全二叉树中,如果某一点只有一个孩子,那么一定就是左孩子。二叉排序树:平衡二叉树:(下图的这两棵二叉树,左边的是平衡二叉树,右边的不是平衡二叉树)...原创 2021-04-28 21:30:06 · 59 阅读 · 0 评论 -
树的常考性质
(1)树的节点个数=各结点度数之和+1(2)度为m的树和m叉树的区别:(3)每层的结点数:那么在此基础上利用等比数列求和就能得到:(4)结点数的下限:(这里他应该是排除了m叉树可能为空树的情况)(5)求m叉非空树的最小高度:(外面括起来的符号表示向上取整)...原创 2021-04-26 09:17:03 · 55 阅读 · 0 评论 -
王道数据结构第44页第24题
题目要求:我的代码实现:#include<stdio.h>#include<stdlib.h>typedef int ElemType;typedef struct LNode{ ElemType data; struct LNode* next;}LNode,*LinkList;//这个尾插法的函数进行了改动,其目的是构造一个有环的单链表: int j=0;LinkList List_TailInsert(LinkList &L){ Elem原创 2021-04-25 12:08:19 · 123 阅读 · 0 评论 -
树的概念和术语
树的图示:结点数为0的树叫做空树。非空树:(1)有且只有一个根结点;(2)没有后继的结点称为“叶子结点”或“终端结点”(3)有后继的结点称为“分支结点”或“非终端结点”除了根结点之外,其他的结点都有且只有一个前驱:上面这个图里的这两个数据结构就不能叫做“树”,而应该叫做“图”或“网”。树中的结点之间的关系的描述(基于人类的家谱):其中最后一种说法很少提及。在树中,两个结点之间的路径是有向的,也就是只能从上至下,而路径长度指的是中间经过了几条边。树的属性:有序树和无序树:原创 2021-04-25 10:42:59 · 142 阅读 · 0 评论 -
双端队列
栈、队列与双端队列:输入受限的双端队列和输出受限的双端队列:在栈中合法的出栈序列,在双端队列中也一定合法原创 2021-04-20 20:46:39 · 98 阅读 · 0 评论 -
矩阵压缩存储
(1)一维数组的存储结构:(2)二维数组存储结构:存储方式可分成行优先和列优先:原创 2021-04-20 13:38:21 · 281 阅读 · 0 评论 -
利用栈实现表达式求值(含C/C++实现)
中缀表达式转后缀表达式的算法规则:先将这个用C语言实现一下:原创 2021-04-19 13:45:08 · 8429 阅读 · 3 评论 -
栈实现中缀表达式转后缀表达式(C/C++语言)
代码如下://用于判断运算符优先级的高低,优先级高于或等于就返回true,否则为false bool Priority(char a,char b){ if((a=='+'||a=='-')&&(b=='+'||b=='-'||b=='*'||b=='/')) { return true; } else if((a=='*'||a=='/')&&(b=='*'||b=='/')) { return true; } return false;}原创 2021-04-16 20:07:18 · 587 阅读 · 0 评论 -
利用栈实现表达式求值(理论分析)
我们常见的计算表达式是中缀表达式,比如:这种表达是由三个部分组成,包括:操作数、运算符、界限符。对于中缀表达式而言,界限符是必不可少的。为了能够不用界限符就能正确表达计算顺序,前缀和后缀表达式诞生了:注意它们的两个别名,“波兰表达式”(前缀表达式)和 “逆波兰表达式”(后缀表达式)。三种表达式的运算规则:(感觉视频中表达式的顺序有点问题)中缀表达式转后缀表达式手算案例:注意:左操作数和右操作数的概念是主讲老师自己定义的,为了理解。包括左优先和右优先原则也是主讲老师为了便于理解自己定义的原创 2021-04-11 15:41:36 · 1540 阅读 · 0 评论 -
利用栈实现括号匹配(C语言实现)
毫无疑问,这部分的知识跟编译原理是在一起的。括号的匹配包括数量和形状上的要求,保证左右括号成双成对。计算机是如何检查括号匹配的:下面这几种情况会被判定为是非法的:(1)括号形状不匹配,则后面的就都不用看了:(2)出现了一个单身的右括号,也就是栈空了,没有左括号出来和它配对了:(3)出现了左括号单身的情况(都扫描完了栈依然还没有空):总体思路:编程实现(基于顺序栈)://这次实现中涉及到的括号只包括小中大三种#include<stdio.h>#include<原创 2021-04-11 13:08:26 · 6964 阅读 · 1 评论 -
一种单链表递增排序算法(C语言)
LinkList BiggerSort(LinkList &L){ LNode* pre=L,*k=L,*minpre=L,*q; while(pre->next->next) { while(pre->next) { if(pre->next->data<minpre->next->data)minpre=pre; pre=pre->next; } q=minpre->next; minpre-&g原创 2021-04-10 20:41:48 · 880 阅读 · 0 评论 -
王道数据结构第40页第6题
题目要求:我的代码实现:#include<stdio.h>#include<stdlib.h>#define ElemType int typedef struct LNode{ ElemType data; struct LNode* next;}LNode,*LinkList;//尾插法(有头结点) LinkList List_HeadInsert(LinkList &L){ ElemType x; L=(LNode*)malloc(siz原创 2021-04-10 20:39:03 · 77 阅读 · 0 评论 -
王道数据结构第40页第2题
题目要求:我的代码实现:#include<stdio.h>#include<stdlib.h>#define ElemType int typedef struct LNode{ ElemType data; struct LNode* next;}LNode,*LinkList;//尾插法(有头结点) LinkList List_HeadInsert(LinkList &L){ ElemType x; L=(LNode*)malloc(siz原创 2021-04-10 19:52:37 · 71 阅读 · 0 评论 -
王道数据结构第40页第4题
题目要求:我的代码实现:#include<stdio.h>#include<stdlib.h>#define ElemType int typedef struct LNode{ ElemType data; struct LNode* next;}LNode,*LinkList;//尾插法(有头结点) LinkList List_HeadInsert(LinkList &L){ ElemType x; L=(LNode*)malloc(siz原创 2021-04-10 19:35:41 · 53 阅读 · 0 评论 -
王道数据结构第40页第3题
题目要求:我的代码实现(两种):(1)基于头插法所构造的单链表:#include<stdio.h>#include<stdlib.h>#define ElemType int typedef struct LNode{ ElemType data; struct LNode* next;}LNode,*LinkList;//头插法(有头结点) LinkList List_HeadInsert(LinkList &L){ ElemType x;原创 2021-04-10 19:03:46 · 88 阅读 · 0 评论 -
王道数据结构第40页第1题
题目要求:我的代码实现:#include<stdio.h>#include<stdlib.h>#define ElemType int typedef struct LNode{ ElemType data; struct LNode* next;}LNode,*LinkList;//尾插法(无头结点) LinkList List_TailInsert(LinkList &L){ ElemType x; L=NULL; LNode *p=L原创 2021-04-10 18:15:20 · 103 阅读 · 0 评论 -
王道数据结构第41页第九题
题目要求:代码实现:#include<stdio.h>#include<stdlib.h>#define ElemType inttypedef struct LNode{ ElemType data; struct LNode* next;}LNode,*LinkList;//头插法构造单链表 LinkList List_HeadInsert(LinkList &L){ LNode *s; int x; L=(LinkList)malloc原创 2021-04-09 15:48:46 · 72 阅读 · 0 评论 -
链式队列的基本操作实现
1.带头结点的链队列:#include<stdio.h>#include<stdlib.h>//链队列的数据类型定义#define ElemType inttypedef struct LinkNode{ ElemType data; struct LinkNode* next;}LinkNode;typedef struct{ LinkNode *front,*rear; int size; //这个结构体成员用来保存当前的链队列元素个数 }LinkQue原创 2021-04-06 21:56:48 · 212 阅读 · 0 评论 -
顺序队列基本操作代码实现
顺序栈中包含了队头指针和队尾指针,按照队尾指针所指向的位置的不同,可将顺序队列分成了如下两种:一、队尾指针指向队尾元素的后一个位置:在针对队列的基本操作中,如何判空和判满?有以下三种办法(1)牺牲掉一个存储空间:#include<stdio.h>#include<stdlib.h>//顺序队列的数据类型定义#define ElemType int#define MaxSize 15typedef struct{ ElemType data[MaxSize];原创 2021-04-06 20:19:00 · 1125 阅读 · 0 评论 -
链栈的基本操作
#include<stdio.h>#include<stdlib.h>#define ElemType int//基本数据类型:typedef struct LinkNode{ ElemType data; struct LinkNode* next;}LinkNode,*LinkStack;//初始化链栈:bool InitLinkStack(LinkStack &S){ S=(LinkStack)malloc(sizeof(LinkNode));原创 2021-04-04 19:22:32 · 181 阅读 · 0 评论