
数据结构的算法之美
pluszzh
这个作者很懒,什么都没留下…
展开
-
两种选择类排序算法(简单选择排序,堆排序)
选择类排序: 1.简单选择排序 //不稳定 void SelectSort(int a[],int n){ int min,i,j,t; //n-1趟循环 for(i=0;i<n-1;i++){ //找出当前区间最小的关键字的位置 min = i; for(j=i+1;j<n;j++){ if(a[j]<a[min]) min=j; } if(i!=min){ t=a[min]; a[min]=a[i]; a[i]=t; } }原创 2020-07-16 20:01:25 · 377 阅读 · 0 评论 -
两种交换类排序(冒泡排序,快速排序)
交换类排序算法代码实现 1.冒泡排序 线性表冒泡排序flag优化 void BubbleSort(int a[] ,int n){ //n-1次起泡 bool flag; for(int i=0;i<n-1;i++){ flag=false; for(int j=0;j<n-i-1;j++){ if(a[j]>a[j+1]){ //保证稳定性,等于不交换 flag = true; int t = a[j]; a[j] = a[j+1];原创 2020-07-16 19:57:17 · 350 阅读 · 0 评论 -
插入排序算法四种实现
插入排序算法实现 直接插入排序不带哨兵版本 void InsertSort(int a[],int n){ //对第二个元素到最后一个元素进行插入操作 int i,j,t; for(i=1;i<n;i++){ int t=a[i]; //通过对比前面的元素找到插入位置 for(j=i-1;j>=0&&a[j]>t;j--){ a[j+1] = a[j]; } //到j+1的位置进行插入 a[j+1]=t; } } 直接原创 2020-07-15 17:44:37 · 587 阅读 · 0 评论 -
图的邻接表存储及常见问题模板(java)
图的邻接表存储及常见问题模板(java) import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { static int N = 100010; static class Node{ ...原创 2020-04-08 11:17:25 · 362 阅读 · 0 评论 -
数据结构 堆排序模板
堆支持的操作: 1.插入一个数 2.求集合当中的最小值 3.删除最小值 4.删除任意一个元素 5.修改任意一个操作 import java.util.Scanner; public class HeapSort{ //堆排序 static int N = 10010; static int [] h = new int[N]; static int siz...原创 2020-02-15 18:52:27 · 170 阅读 · 0 评论 -
基础算法——一维数组离散化(acwing802)
假定有一个无限长的数轴,数轴上每个坐标上的数都是0。 现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。 近下来,进行 m 次询问,每个询问包含两个整数l和r,你需要求出在区间[l, r]之间的所有数的和。 输入格式 第一行包含两个整数n和m。 接下来 n 行,每行包含两个整数x和c。 再接下里 m 行,每行包含两个整数l和r。 输出格式 共m行,每行输出一个询问中所求的区间内数字和...原创 2020-01-26 18:34:07 · 682 阅读 · 0 评论 -
数据结构-树状数组的原理及应用
1. 树状数组的作用: ①区间查询 ②单点修改 2.定义 设树状数组为tr[N] 1<=i<=N 2.1 tr[i] 存储的是 (i - lowbit(i) , i ] 区间的和 例图 lowbit(i) :设k为i的二进制表示末尾的0的个数 , lowbit(i) 表示: 2的k次方 函数编写如下: lowbit(int i){ return i & -i;...原创 2020-01-22 15:15:20 · 372 阅读 · 0 评论 -
用两个栈来实现一个简单的计算器
思路 1.确定符号的优先级 # 0 ,+ - 1,* / 2, 2.向栈中添加 2.1如果是数字,直接进操作数栈 2.2如果是操作符 2.2.1 如果当前操作符号的优先级大于栈顶元素的操作符的优先级,直接进栈 2.2.2 如果当前操作符号的优先级小于或等于栈顶元素操作符的优先级,操作符栈退1次,操作数 栈退2次,进行对应的操作后,把获得的结果压栈 其中设置的#操作符的优先级为0,优先级最低,优先...原创 2019-12-01 12:05:30 · 624 阅读 · 0 评论 -
中缀表达式,后缀表达式,中缀表达式转后缀表达式
一. 后缀表达式求值 后缀表达式也叫逆波兰表达式,其求值过程可以用到栈来辅助存储。假定待求值的后缀表达式为:6 5 2 3 + 8 * + 3 + *,则其求值过程如下: 1)遍历表达式,遇到的数字首先放入栈中,此时栈如下所示: 2)接着读到“+”,则弹出3和2,执行3+2,计算结果等于5,并将5压入到栈中。 3)读到8,将其直接放入栈中。 4)读到“”,弹出8和5,执...原创 2019-07-11 18:22:26 · 330 阅读 · 0 评论 -
简易停车系统的实现
2、停车场管理 [问题描述] 设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出...原创 2019-01-24 14:53:30 · 983 阅读 · 0 评论 -
数据结构(四)之非递归遍历二叉树
void Inoder(Bitree root)//二叉树的中序遍历非递归 { IniStack(&S);//初始化一个栈 p=root; while(!isEmpty(S)||p!=NULL) { if(p!=NULL)//如果当前结点不为空进栈 { push(S,p); p=p->left;//若该节点的左节点不为空,继续进栈 } els...原创 2019-01-02 14:03:51 · 263 阅读 · 0 评论 -
数据结构之(三)之数组篇
①设计一个算法,将一维数组A(下标从1开始)中的元素循环右移k位,要求 只用一个元素大小的附加存储空间。给出算法的时间复杂度。 #include&lt;stdio.h&gt; int Cir(int a[],int n,int k)//数组a,数组的 个数,循环的位数 { for(int i=0;i&lt;k;i++) { int t; t=a[n-1]; ...原创 2019-01-02 11:12:51 · 409 阅读 · 0 评论 -
数据结构之(六)之二叉排序树
二叉排序树定义: ①它的左子树非空,那么左子树的值要小于根节点的值。 ②它的右子树非空,那么右子树的值要小于根节点的值。 ③它的左右子树也为二叉排序数。 二叉排序数的初始化,创建较简单,直接贴上源代码。这篇博客主要探讨的是二叉排序树的删除操作。 #include&lt;stdio.h&gt; #include&lt;iostream&gt; #include&lt;stdlib.h&gt; usi原创 2019-01-05 12:34:52 · 335 阅读 · 0 评论 -
数据结构(五)之图的深度优先遍历和广度优先遍历
/*深度优先搜索策略*/ /*dfs深度搜索策略:①从某个顶点v0出发,首先访问v0。 ② 找出刚访问节点的第一个未被访问的邻接点,然后访问该节点。以该节点为新顶点,重复此步骤,直到刚访问 过的顶点没有未被访问的邻接点位置。 ③返回前一个访问过的且仍有未被访问的邻接点的顶点,找出该顶点的下一个未被访问的邻接点,访问该邻接点, ...原创 2019-01-04 14:16:53 · 1296 阅读 · 0 评论 -
约瑟夫环循环链表实现和队列实现
约瑟夫(Joseph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。 此程序运用了循环链表和递归的方法来...原创 2019-01-04 12:27:38 · 479 阅读 · 1 评论 -
数据结构(二)之稀疏矩阵篇
稀疏矩阵是指矩阵中大多数元素为零的矩阵。从直观上讲,当非零元素个数低于总元素的30%,这样的矩阵被称为稀疏矩阵。 稀疏矩阵的表示方法 ex1 A={0,12,9,0,0,0,0 0,0,0,0,0,0,0 -3,0,0,0,0,14,0 0,0,24,0,0,0,0 0,18,0,0,0,0,0 15,0,0,-7,0,0,0} 一 三元组表示法 ...原创 2018-12-28 14:23:13 · 1002 阅读 · 0 评论 -
数据结构(一)之链表篇
链表篇 #include<stdio.h>//P77例三 int ReversDouble(LinkList L) { int n=1; LinkList pre,p,q; pre=L; p1=L->next; p=L->next; while(p) { q=p->next; if(n%2==1) { ...原创 2018-12-27 15:27:11 · 173 阅读 · 0 评论