
数据结构—考研代码实现
根据王道的考研数据结构实现的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 · 452 阅读 · 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 KA 0 1 0 0 1 0 0 0 0 0 0原创 2022-05-17 19:54:41 · 1694 阅读 · 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 · 1956 阅读 · 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 · 592 阅读 · 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 · 903 阅读 · 0 评论 -
栈在表达式求值中的应用
栈在表达式求值中的应用栈的基本操作1,初始化2,取栈顶值3,出栈4,入栈我们用这么多操作就能实现表达式求值了王道的课程之中讲到的后缀表达式的思想是很关键点,在此之前要把中缀表达式转换为后缀表达式然后再求值。按照他给的思路我把代码给写出来了,遇到了不少问题,debug一下午就没了!菜死我了。第一大块代码是操作符栈的定义和相关的基本操作。栈是用静态数组实现的应该不难理解。//Opstact Op; typedef struct{ char data[Maxsize]; int top原创 2022-05-01 19:27:21 · 748 阅读 · 0 评论 -
栈在括号匹配中的应用
括号匹配3.3.1栈在括号匹配中的应用假设表达式中允许包含三种括号:圆括号,中括号,大括号。其嵌套的顺序任意,例如{)()})匹配失败([])(){} 匹配成功!!!//顺序栈#include<stdio.h>#define Maxsize 10typedef struct { char data[Maxsize]; int top;}SqStact;void InitStact(SqStact &S){ S.top=0;}bool Emptystact(S原创 2022-04-29 22:05:48 · 771 阅读 · 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 · 107 阅读 · 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 · 156 阅读 · 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 · 760 阅读 · 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 · 798 阅读 · 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 · 756 阅读 · 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 · 1111 阅读 · 0 评论 -
单链表的实现(一)
根据王道课程讲的实现一下代码;头插法和尾插法;感觉没那么困难。刚学也觉得很难搞,不会写代码,很难受,但是一步步坚持下来就好了。带头结点的头插法头插法输出的会逆序,假如要实现逆序一个链表,用头插法就可以搞定了!为什么要假如一个头结点呢?1.由于第一个节点的位置被头结点代替,因而不必再考虑第一个节点带来的特俗情况。2.无论链表是否是空表,其头指针都指向头结点。让空表和非空表也做到了统一。#include<stdio.h>#include<stdlib.h>//定义一原创 2022-04-24 17:31:36 · 1456 阅读 · 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 · 340 阅读 · 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 · 756 阅读 · 0 评论