数据结构
年少却很低调
云淡风轻,都是一场梦!
展开
-
线性表之顺序表示
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define ElemType int//数据元素的数据类型#define LIST_INIT_SIZE 100//线性表储存空间的初始分配量#define LISTINCREMENT 10//线性表储存空间的分配增量typ...原创 2018-07-31 23:06:31 · 193 阅读 · 0 评论 -
二叉树3种遍历算法递归与非递归实现详解
一, 二叉树先序遍历的实现 递归实现void PreOrderTraverse(BiTree T){ if( T ) { VisitF(T->data);//访问根节点 PreOrderTraverse(T->lchild);//递归左子树 PreOrderTraverse(T->r...原创 2018-08-20 23:53:53 · 12459 阅读 · 3 评论 -
图论(DFS和BFS)
#include<stdio.h>#include<algorithm>#include<queue>#include<stack>#include<iostream>using namespace std;#define maxSize 101int INF = -2313;int MINF = 6666;//定义...原创 2019-03-10 15:33:51 · 211 阅读 · 0 评论 -
图论(最小生成树,Prim算法和Kruskal算法)
#include<stdio.h>#include<algorithm>#include<queue>#include<stack>#include<iostream>using namespace std;#define maxSize 101int INF = -2313;int MINF = 6666;//定...原创 2019-03-10 15:35:34 · 859 阅读 · 0 评论 -
图论(最短路径,Dijkstra算法和Floyd算法)
#include<stdio.h>#include<algorithm>#include<queue>#include<stack>#include<iostream>using namespace std;#define maxSize 101int INF = -2313;int MINF = 6666;//定义...原创 2019-03-10 15:36:41 · 445 阅读 · 0 评论 -
图论(拓扑排序,检查图是否存在环)
#include<stdio.h>#include<algorithm>#include<queue>#include<stack>#include<iostream>using namespace std;#define maxSize 101int INF = -2313;int MINF = 6666;//定义...原创 2019-03-10 15:38:38 · 308 阅读 · 0 评论 -
判断是否为完全二叉树,平衡二叉树,二叉排序树
//完全二叉树//判断是否为完全二叉树//思想:采用层次遍历,将所有的结点入队(包括空结点),当遇见空结点时,查看其后面的结点是否有非空结点,//若有非结点,则不是完全二叉树bool isComplete(Tree T){ queue<Tree> Q; Tree p; if(T == NULL) return true; ...原创 2019-05-16 15:53:48 · 1138 阅读 · 0 评论 -
树常考的一些递归算法
//递归统计叶子结点int leaf_count(Tree T){ if(T == NULL) return 0; if(T->lchild == NULL &&T->rchild == NULL)//叶子结点 return 1; return leaf_count(T->lchild)+leaf_...原创 2019-05-16 15:54:34 · 501 阅读 · 0 评论 -
树的高度,宽度
//树的孩子兄弟结点定义typedef struct CSNode{ char data; CSNode *nextchild,*nextsibling;} CSNode,*CSTree;/* 树的一些递归算法一定要知道*///树的高度int Height(CSTree bt){ int hl,hr; if(bt ==NULL)...原创 2019-05-16 15:55:17 · 672 阅读 · 0 评论 -
线索二叉树代码详解(与严蔚敏配套的实现)
首先画个简图我们要实现的样子: #include<stdio.h>#include<stdlib.h>#define OK 1#define ERROR -1typedef char TElemType;typedef int Status;//线索存储标志位//Link(0):表示指向左右孩子结点的指针//Thread(1...原创 2018-08-17 23:37:15 · 1912 阅读 · 4 评论 -
栈的顺序表示法(2种方法实现),链式实现,共享栈的操作
#include<stdio.h>#include<stdlib.h>#define STACK_INIT_SIZE 100#define STACKINCRMENT 10#define OK 1#define ERROR 0typedef int SElemType;typedef int Status;/*栈的顺序表示法1*/typedef st...原创 2018-08-07 23:22:53 · 368 阅读 · 0 评论 -
设C = {a1,b1,a2,b2......,an,bn},采用头结点的hc单链表来存放, 设计一个就地算法,将其拆成 A = {a1,a2....a2} B = {bn,bn-1,...b1}
/*设C = {a1,b1,a2,b2......,an,bn},采用头结点的hc单链表来存放,设计一个就地算法,将其拆成A = {a1,a2....a2} B = {bn,bn-1,...b1}很容易联想到头插法*/LinkList DisCreat_2(LinkList &A){ LinkList B = (LinkList)malloc(sizeof(...原创 2018-08-02 23:48:37 · 4891 阅读 · 0 评论 -
在链表中删除所有x元素的结点的递归实现和非递归实现
//用递归删除值为x的节点void Del_X_3(LinkList &L,ElemType x){ NODE *p;//p指向待删除的节点 if(L==NULL) { return; } if(L->data == x) { p = L; L=L->next; ...原创 2018-08-01 23:10:36 · 1088 阅读 · 3 评论 -
将带有头结点链表“就地”逆置,其中“就地”指的是辅助控件的复杂度为O(1)
//将链表就地逆序LinkList Reverse_1(LinkList L){ /*基本思想是采用头插法来实现链表的逆序,这样控件复杂度就降为O(1)了*/ NODE *p,*r; //p为工作指针,r为的后继(防止断链) p = L->next;//从第一个结点开始 p-> L->next = NULL; while(p...原创 2018-08-01 23:23:52 · 263 阅读 · 0 评论 -
将带有头结点的链表逆向输出,但是不改变其原来的结构
将带有头结点的链表逆向输出,但是不改变其原来的结构,则可以联想到递归调用输出//从尾部到头输入单链表的L中的每个结点用递归可以实现void R_Print(LinkList L){ //从尾部到头输入单链表的L中的每个结点用递归可以实现 if(L->next !=NULL) { R_Print(L->next); } ...原创 2018-08-01 23:32:59 · 368 阅读 · 0 评论 -
将带有头结点的链表递增排列
//将单链表的结点重新排序,使其达到递增有序void Sort(LinkList &L){ NODE *p = L->next,*pre; NODE *r = p->next;//r保存*p的后继结点的信息 p->next = NULL;//构造一个只含一个数据结点的有序表 p =r; while(p!=NULL) ...原创 2018-08-01 23:52:57 · 1390 阅读 · 0 评论 -
链表中删除在min和max之间的结点
//删除在min和max之间的结点void RangeDelete(LinkList &L,int mins,int maxs){ NODE *pre = L,*p = L->next; while(p!=NULL) { if(p->data>mins&&p->data<maxs)//找到被删除的结...原创 2018-08-02 23:44:09 · 1781 阅读 · 0 评论 -
两个链表有公共结点
两个链表有公共结点的话,那么该公共节点之后的所有结点都应该重合,既他们的最后一个结点必然重合,在遍历链表时,遍历到第一个公共结点时,到最后的结点的距离是相同的,所以1:先遍历两个链表的长度,并求出链表长度差2:在长链表先遍历长度差个结点后再同时遍历2个链表,直到找到相同的结点,或者一直到遍历结束 //寻找L1和L2的公共结点/*两个链表有公共结点的话,那么该公共节点之后的所...原创 2018-08-02 23:44:59 · 523 阅读 · 0 评论 -
链表中升序删除结点
//升序删除结点void Min_delete(LinkList &L){ LinkList pre,p; while(L->next) { pre = L;//存放最小结点的前驱 p = L->next;//工作指针 while(p->next) { ...原创 2018-08-02 23:45:32 · 207 阅读 · 0 评论 -
将带有头结点的链表分解为两个带有头结点的链表A,B,使其A含有原来链表的奇数位,B为偶数位,保持其相对顺序不变
//将奇数结点放到A,偶数结点放在BLinkList DisCreat_1(LinkList &A){ int i= 0; LinkList B = (LinkList)malloc(sizeof(NODE)); B->next = NULL; LinkList ra = A,rb = B,p; p = A->next; //p...原创 2018-08-02 23:47:59 · 1722 阅读 · 0 评论 -
经典算法---骑士走棋盘
骑士走棋盘 #define SIZE 8int possible(int board[][SIZE],int nexti[],int nextj[],int x,int y);int min_direction(int board[][SIZE],int nexti[],int nextj[],int count);bool travel(int board[][SIZE],i...原创 2019-05-16 15:59:49 · 575 阅读 · 0 评论