![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构—考研代码实现
根据王道的考研数据结构实现的c代码,一起加油!
无关8688
天若有情天易老,人间正道是沧桑!
展开
-
图的BFS和DFS(邻接表)
BFS广度优先遍历 DFS深度优先遍历 上一篇已经叙述了相关的概念了。主要用代码实现一下。建议先看一下王道的课吧!个人感觉c语言基础比较可以的才能理清这指针指来指去的。反正我已经快麻木了。 今天给大家换个例子,尝尝鲜。 上图包含了邻接表的直观感受。 看一下邻接表的代码定义 //顶点 typedef struct Vnode{ char data; //对应图中data A,B···用来存储顶点信息 struct ArcNode * first;//指向与该顶点的相连的边 }Vnode,AdjList原创 2022-05-18 21:24:33 · 429 阅读 · 0 评论 -
图的BFS和DFS
BFS广度优先遍历 这一小节先用邻接表的存储结构实现BFS和DFS 看一下王道课给的例子 邻接表就是二维矩阵 //图---邻接矩阵法 typedef struct{ char Ver[MaxVertexnum]; //顶点表 int Edge[MaxVertexnum][MaxVertexnum];//边表 int Vexnum,arcnum;//顶点数,边数 }MGraph; 该图对应的邻接表为 A BCD E FG H I J K A 0 1 0 0 1 0 0 0 0 0 0原创 2022-05-17 19:54:41 · 1626 阅读 · 0 评论 -
树的层序遍历
树的层序遍历 树的先序,中序,后序遍历对应了深度优先遍历。而层序遍历为广度优先遍历。 层序遍历很好理解,从根节开始一层层的遍历访问,访问完第一层访问第二层。 定义一个队列就可以搞定层序遍历了。 还是这个例子,这个树的层序遍历序列为:1 2 3 4 5 6 代码实现 //层序遍历 void LevelOrder(LinkQueue Q,BiTree T){ BiTree p; EnQueue(Q,T);//将根节点入队 while(!isEmptyQueue(Q)){//队列不空,循环 DeQu原创 2022-05-11 17:48:43 · 1903 阅读 · 0 评论 -
二叉树的非递归遍历
第五章 二叉树非递归遍历 先序遍历 先遍历根节点其次左子树和右子树 中序遍历 先遍历左子树其次根节点最后右子树 后序遍历 先左子树再右子树最后根节点 还是上个博客的图 先序遍历结果 1 2 4 6 3 5 (根左右) 1是根 2 4 6 是左子树 3 5 是右子树 中序遍历结果 2 6 4 1 3 5 (左根右) 2 6 4 是左子树 1 是根 3 5 是右子树 后序遍历结果 6 4 2 5 3 1 (左右根) 6 4 2 是左子树 5 3 是右子树 1 是根 今天用栈来实现非递归遍历 非递归VS递归 递原创 2022-05-11 16:47:37 · 558 阅读 · 3 评论 -
二叉树的创建及递归遍历
第五章 二叉树代码实现 根据递归的思想实现二叉树的三种遍历; 先序遍历 先遍历根节点其次左子树和右子树 中序遍历 先遍历左子树其次根节点最后右子树 后序遍历 先左子树再右子树最后根节点 看个例子 先序遍历结果 1 2 4 6 3 5 (根左右) 1是根 2 4 6 是左子树 3 5 是右子树 中序遍历结果 2 6 4 1 3 5 (左根右) 2 6 4 是左子树 1 是根 3 5 是右子树 后序遍历结果 6 4 2 5 3 1 (原创 2022-05-07 20:41:26 · 804 阅读 · 0 评论 -
栈在表达式求值中的应用
栈在表达式求值中的应用 栈的基本操作 1,初始化 2,取栈顶值 3,出栈 4,入栈 我们用这么多操作就能实现表达式求值了 王道的课程之中讲到的后缀表达式的思想是很关键点,在此之前要把中缀表达式转换为后缀表达式然后再求值。 按照他给的思路我把代码给写出来了,遇到了不少问题,debug一下午就没了!菜死我了。 第一大块代码是操作符栈的定义和相关的基本操作。栈是用静态数组实现的应该不难理解。 //Opstact Op; typedef struct{ char data[Maxsize]; int top原创 2022-05-01 19:27:21 · 702 阅读 · 0 评论 -
栈在括号匹配中的应用
括号匹配 3.3.1栈在括号匹配中的应用 假设表达式中允许包含三种括号:圆括号,中括号,大括号。其嵌套的顺序任意,例如{)()})匹配失败 ([])(){} 匹配成功!!! //顺序栈 #include<stdio.h> #define Maxsize 10 typedef struct { char data[Maxsize]; int top; }SqStact; void InitStact(SqStact &S){ S.top=0; } bool Emptystact(S原创 2022-04-29 22:05:48 · 747 阅读 · 0 评论 -
队列的实现(二)
链表实现队列 带头结点的链队 #include<stdio.h> #include<stdlib.h> //队列节点的结构定义 typedef struct Linknode{ int data; struct Linknode *next; }Linknode; //队列首尾指针的定义 typedef struct{ Linknode *front,*rear; }LinkQueue; //队列初始化 void InitQueue(LinkQueue &Q){原创 2022-04-28 15:49:15 · 84 阅读 · 0 评论 -
队列的实现(一)
静态数组实现队列 如何做到不浪费单元的队列? 方案一 设置变量计数 //用静态数组实现队列 #include<stdio.h> #define Maxsize 10 //定义队列结构 typedef struct{ int data[Maxsize];//静态数组 int front,rear;//队列首尾指针(下标) int size;//队列放入的元素个数 }SqQueue; //初始化队列 void InitQueue(SqQueue &Q){ //首尾指针设为原创 2022-04-28 13:06:51 · 139 阅读 · 0 评论 -
栈的顺序表和链表实现代码
第三章代码 不知不觉已经第三章了。坚持更新,虽然可能看到的人比较少。人气也不高。但是知道自己懂了进步了就可以了。 栈(用顺序表实现栈) #include<stdio.h> #define Maxsize 10 //定义栈结构 typedef struct{ int data[Maxsize];//数组 int top;//逻辑上充当栈指针 }SqStack; //初始化栈 void Initstack(SqStack &S){ S.top=-1; } //判空 bool Emp原创 2022-04-27 21:11:03 · 741 阅读 · 0 评论 -
循环单链表实现
循环单链表的头插和尾插 循环单链表主要是要构成一个闭环; 很大一部分内容都不用改,都和单链表一样。 #include<stdio.h> #include<stdlib.h> //定义一个结构体表示节点: typedef struct LNode{ int data;//节点元素值 struct LNode * next;//指针,指向链表下一个节点 }LNode,*LinkList; //头插法创建循环单链表; LinkList List_HeadInsert(Li原创 2022-04-26 17:09:49 · 740 阅读 · 2 评论 -
双链表实现
头插法 双链表的实现稍微比单链表复杂一点。链接的时候链不能断。 #include<stdio.h> #include<stdlib.h> typedef struct DNode{//定义双链表的结点类型 int data; //数据域 struct DNode *prior,*next;//前向指针,后向指针 }DNode,*DLinklist; //双链表的初始化 bool InitDList(DLinklist &L){ L=(DNode*)ma原创 2022-04-26 15:50:33 · 702 阅读 · 0 评论 -
单链表实现(二)
单链表相关的操作 文字的表述力是有限的。理解是首要的,动手操作是必要的。 #include<stdio.h> #include<stdlib.h> //定义一个结构体表示节点: typedef struct LNode{ int data;//节点元素值 struct LNode * next;//指针,指向链表下一个节点 }LNode,*LinkList; //头插法创建单链表; LinkList List_HeadInsert(LinkList &L){原创 2022-04-24 18:22:18 · 1069 阅读 · 0 评论 -
单链表的实现(一)
根据王道课程讲的实现一下代码; 头插法和尾插法; 感觉没那么困难。刚学也觉得很难搞,不会写代码,很难受,但是一步步坚持下来就好了。 带头结点的头插法 头插法输出的会逆序,假如要实现逆序一个链表,用头插法就可以搞定了! 为什么要假如一个头结点呢? 1.由于第一个节点的位置被头结点代替,因而不必再考虑第一个节点带来的特俗情况。 2.无论链表是否是空表,其头指针都指向头结点。让空表和非空表也做到了统一。 #include<stdio.h> #include<stdlib.h> //定义一原创 2022-04-24 17:31:36 · 1431 阅读 · 0 评论 -
线性表实现(二)
第二章线性表 用动态数组实现线性表。 把书上给到的函数给实现一下。 话不多说,直接上代码了。 void InitList(SqList &L); 初始化表。构造一个空表。 bool List_input(SqList &L,int n); 键入数据元素,n为你想键入的个数。 void IncreaseSize(SeqList &L,int len) 动态增加数组的长度。 bool PrintfList(SqList &L); 输出操作,按先后顺序输出线性表的所有元素。 int原创 2022-04-23 19:29:50 · 316 阅读 · 0 评论 -
线性表的实现(一)
我回来了,也变强了!准备更新王道考研课程中实现的代码。欢迎交流! 第二章线性表 用静态数组实现线性表。 把书上给到的函数给实现一下。 话不多说,直接上代码了。 void InitList(SqList &L); 初始化表。构造一个空表。 bool List_input(SqList &L,int n); 键入数据元素,n为你想键入的个数。 bool PrintfList(SqList &L); 输出操作,按先后顺序输出线性表的所有元素。 int Length(SqList L); 求原创 2022-04-23 18:20:58 · 670 阅读 · 0 评论