![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
「已注销」
这个作者很懒,什么都没留下…
展开
-
初见session
以前很喜欢用cookie,但是cookie存放在客户端,f12一下就被看到了,很不安全。而session存放在服务器端,在客户端上是无法看到的。而且也可以完成页面之间传递数据的功能。...原创 2020-05-02 22:55:55 · 138 阅读 · 0 评论 -
margin-top,padding-top,top
margin-top:是指外边距padding-top:内部边距top:position必须是absolute原创 2020-03-23 14:28:11 · 486 阅读 · 0 评论 -
平衡二叉树的调整
平衡二叉树的调整:每次插入关键字后,计算平衡因子,选取最小的失去平衡的子树进行调整。调整的时候,选取平衡因子和其下面的两个节点的中间值作为根节点,讲最小值放到左子树,最大放到右子树。最后检查是否满足平衡二叉树。四种调整:LL调整,RR调整,LR调整,RL调整。...原创 2019-10-20 19:56:46 · 227 阅读 · 0 评论 -
二叉排序树的创建
根据一个属数组创建二叉排序树。具体思想:二叉排序树的创建,是通过一个一个关键字的插入实现的,不是一次性完成的。代码:typedef struct node{ int data; struct node *left; struct node *right;}node;void insert(node *&p,int a)//引用型,需要改变p的内容{ if(p==NUL...原创 2019-10-20 09:22:24 · 1221 阅读 · 0 评论 -
汉罗塔问题
#include "stdafx.h"#include <iostream>using namespace std;void han(int n,char A,char B,char C){ if(n==1) { cout<<A<<' '<<C<<endl;//递归出口,将A上的盘子移动到C } else { h...原创 2019-10-20 08:56:29 · 129 阅读 · 0 评论 -
二叉排序树的创建
二叉排序树的定义1.若它的左子树不为空,则左边所有关键字均小于根关键字的值2.若它的右子树不为空,则右子树的关键字均大于根关键字的值3.左右子树又各是一颗二叉排序树二叉树的创建方法,就是将关键字逐个插入树的空指针处为什么插入空指针处?原理还不是太清楚,但是随便举几个例子便知道。所以二叉排序树的创建就是将每一个新接收到的关键字,比大小,放到最后的空指针处。...原创 2019-10-19 20:59:49 · 248 阅读 · 0 评论 -
二路归并排序
待完成:void merge(int a[],int low,int high){ int mid,i,j,k; mid=(low+high)/2; i=low,j=mid+1,k=0; int b[10]; while(i<=mid&&j<=high) { if(a[i]>a[j]) { b[k++]=a[j++]; } e...原创 2019-10-15 13:08:38 · 68 阅读 · 0 评论 -
堆排序
堆:可以把堆看成完全二叉树,这棵树瞒满足:任何一个非叶子结点的值都不大于(或都不小于)其孩子节点的值。若父亲大孩子小,叫做大根堆,否则叫做小根堆。调整的过程:选取最后一个非叶子节点,即N/2,从右到左,从上到下一直调整到根节点,下标为1。在调整的过程中若要构建大顶堆,若果孩子节点都比父亲大,则选取孩子节点中较大值。交换之后还需要判断交换后的孩子节点和其孩子节点是否满足条件。```govoi...原创 2019-10-15 09:00:21 · 104 阅读 · 0 评论 -
简单选择排序
void jiandan(int a[]){ int i,j,k,m; int temp; for(i=0;i<n;i++) { k=i; for(j=i+1;j<n;j++) { if(a[k]>a[j]) { k=j;//遇到小的就将k=j,此时a[k]=a[j]; } } swap(a[i],a[k]); }}...原创 2019-10-14 12:58:28 · 72 阅读 · 0 评论 -
快速排序
void quicksort(int a[],int low,int high){ int temp; int i=low,j=high; if(low<high) { temp=a[low]; while(i<j) { while(i<j&&a[j]>=temp) j--; if(i<j) ...原创 2019-10-14 11:55:17 · 66 阅读 · 0 评论 -
冒泡排序
https://www.cnblogs.com/ciyeer/p/9075328.html冒泡排序名称的由来:第一个关键字和第二个关键字比较,如果第一个比第二个大就交换位置,第二个关键字再和第三个关键字比较,同样,这样一趟比较完了,最大的就放到了最后一个位置。然后再对剩下的元素进行比较。其中可以加快效率的地方在于:有可能序列一开始就是有序的,但代码还是会一直执行下去,怎么让他直接跳出呢?用一个...原创 2019-10-14 11:13:11 · 94 阅读 · 0 评论 -
折半插入排序
void quicksort(int a[],int n){ int temp; for(int i=1;i<n;i++) { temp=a[i]; int r=i-1; int l=0; while(r>=l)//查找插入的位置,即前一个元素比插入元素大,后一个元素比插入元素小的元素 { int mid=(r+l)/2;...原创 2019-10-13 11:55:01 · 78 阅读 · 0 评论 -
直接插入排序
直接插入排序算法的思想,将第一个元素作为已排序序列,将剩下的n-1个元素逐步插入,插入时,逐个和已排序序列进行对比,如果发现有比待插入元素大的,就将其后移,最后将待插入元素放到最后的空位置上。void insertsort(int a[],int n){ int j; for(int i=1;i<n;i++) { int temp=a[i];//准备插入第i个元素 j=i...原创 2019-10-13 10:11:43 · 90 阅读 · 0 评论 -
非递归实现图的深度优先收索
图的深度优先是调用了系统栈,实现了递归。非递归:while循环,栈int vis[100]={0};void dfs(graph g,int v){ int stack[100],top=0; stack[++top]=v; cout<<v<<' '; vis[v]=1; while(top!=0) { int j=stack[to...原创 2019-10-12 09:58:58 · 360 阅读 · 0 评论 -
出现编译器停止工行的问题
检查数组是否越界,指针是否初始化,是否分配了空间。原创 2019-10-12 09:26:28 · 71 阅读 · 0 评论 -
拓扑排序
// DAY20.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include<iostream>using namespace std;#define max 100typedef struct arc{ int ad; struct arc *nex...原创 2019-10-09 12:10:16 · 76 阅读 · 0 评论 -
最短路径之floyd
// DAY20.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include<iostream>using namespace std;#define max 100int n,e;int w[max][max];int path[max][max];...原创 2019-10-09 09:06:46 · 193 阅读 · 0 评论 -
克鲁斯卡尔算法的实现(找最小生成树)
天下大事,必做于细;天下难事,必作于易。这个算法看了两天,边看边骂那一种,可今天,我先把并查集算法的代码搞懂了,结果才发现不过是排序后的元素进行并查集操作。具体思想:将图的每条边保存下来(a:顶点,b:顶点,w:权重),a<b;然后将按照权重大小进行边排序,(冒泡,快排,还未学到排序,所以我用的最简单的冒泡),然后将边进行合并。具体代码如下:// day19.cpp : Def...原创 2019-10-07 11:58:20 · 172 阅读 · 0 评论 -
关于指针
参考:https://blog.csdn.net/mhjcumt/article/details/7351032一.指针的概念在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址 **,它的值直接指向(points to)存在电脑存储器中另一个地方的值。**由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为"指针"。意思是通过它能找到以它为...原创 2019-09-22 13:41:51 · 168 阅读 · 0 评论 -
结构体的两种调用方式
typedef struct node{int data;struct node *next;}node;typedef struct{int data[10];int length;}str;第一种方式:str s1;s1.length=0;假如内部有指针需要单独分配空间typedef struct{int data;int length;}str;str s1...原创 2019-09-22 13:53:16 · 7099 阅读 · 0 评论 -
两次在内部调用自身的递归
今天复习数据结构的二叉树,其中涉及到了递归,二叉树的核心也是递归,并且二叉树内部是两次递归,想要真正弄懂代码的每一步是怎么执行的,怎么递的,怎么归的。网上都没怎么解释,就说一个先建立递归建立左子树,然后递归建立右子树,当遇到空的时候就返回上一个节点,然后又访问右子树,如果为空就返回,然后这个节点已经访问过了,又返回上层。我就想知道为什么它要返回,为什么他知道访问过了?他怎么返回的?返回的过程是怎...原创 2019-09-25 20:52:11 · 1155 阅读 · 1 评论 -
关于递归内部的Return关键字
return只能返回上层函数。原创 2019-09-26 09:50:18 · 176 阅读 · 0 评论 -
for语句,括号后面加上分号,可以单独成句
我一直以为是创建线索二叉树或者寻找节点的算法错了,结果是for循环多了个引号,编译却不报错。原创 2019-09-27 11:45:39 · 1309 阅读 · 0 评论 -
图的邻接矩阵存储
创捷邻接矩阵typedef struct{vextyp vex[maxsize];(typedef char vextyp)arctyp arc[maxsize][maxsize];int vexnum,arcnum;}mgraph;初始化void creategraph(mgraph &g){cout<<“请输入顶点个数,边的条数”<<endl...原创 2019-10-04 16:58:49 · 126 阅读 · 0 评论 -
prim算法(粗简版)
1.定义一个图的矩阵结构体typedef struct{int quan[100][100];//存储权重int n,e;//顶点数,边数}gr;2.初始化void cre(gr &g){cout<<“请输入顶点个数,边条数”<<endl;cin>>g.n>>g.e;for(int i=0;i<g.n;i++)//...原创 2019-10-04 16:54:49 · 128 阅读 · 0 评论 -
判断一个无向图是否是连通图
void def2(g gra,int &vn,int &en,int v){vis[v]=1;vn++;arcnode *p;p=gra.vex[v].first;while§{gn++;if(vis[p->adjex]0){def2(gra,vn,en,p->adjex);}p=p->next;}}if(vngra.n&...原创 2019-10-04 16:55:29 · 3798 阅读 · 0 评论 -
图的邻接表存储
typedef struct arcnode{int adjvex;struct arcnode *nexarc;}arcnode;typedef struct{char data;arcnode *firstarc;}vnode;typedef struct{vnode adjlist[100];int n,e;}graph;void create(graph &a...原创 2019-10-04 16:55:48 · 159 阅读 · 0 评论 -
图的邻接表的广度优先遍历
void bfs(graph g,int v){arcnode *p;int que[100],front=0,rear=0;int j;cout<<g.adjlist[v].data<<’ ‘;vis[v]=1;rear=(rear+1)%100;que[rear]=v;while(front!=rear){front=(front+1)%100;...原创 2019-10-04 16:56:16 · 340 阅读 · 0 评论 -
图的邻接表的深度遍历
void deptht(graph g,int x){arcnode *p;vis[x]=1;cout<<g.adjlist[x].data;p=g.adjlist[x].firstarc;while§{if(vis[p->adjvex]==0){deptht(g,p->adjvex);}p=p->nexarc;}}原创 2019-10-04 16:56:46 · 388 阅读 · 0 评论 -
树的双亲存储结构
树的双亲节点存储结构,是用结构体数组保存当前节点的值以及他的父节点的位置。根节点存放双亲节点位置处为-1;优点:找寻根节点和双亲节点很方便。#include "stdafx.h"#include<iostream>using namespace std;typedef struct //节点结构{ char data; int parent;}node;type...原创 2019-10-06 09:15:33 · 3351 阅读 · 0 评论 -
有趣的人让代码变有趣,无趣的人抱怨代码太枯燥
https://blog.csdn.net/qq_41593380/article/details/81146850原创 2019-10-06 09:25:49 · 154 阅读 · 0 评论 -
并查集的实现
套用一下上篇文章里大佬的说法。为什么要做并查集。并:合并,查:查找,集:集合(其实是用树结构来进行存储的,这样方便找到根节点,否则要和集合中的元素一个一个比对。用树存储,还可以进行路径压缩,进行进一步的代码优化处理。)怎么并:就像打仗开始全是士兵,但打仗时不行啊,你到底是敌人还是队友,我到底该不该砍你。于是就开始区分敌人一方,队友一方。但是要怎么区分?每个人认识的人都是有限的,遇到不认识...原创 2019-10-06 11:54:21 · 123 阅读 · 0 评论 -
关于二维数组的函数与调用
void change(int a[][3],int b[][2]){for(int i=0;i<2;i++){for(int j=0;j<3;j++){b[j][i]=a[i][j];}}}int a[2][3],b[3][2];change(a,b);解释:因为任何数组传入函数都是传入的数组的首地址,所以不能写成(a[][])形式,数组的传入方式类似于指针,...原创 2019-09-22 13:00:18 · 6811 阅读 · 0 评论