
数据结构&&算法
no-96
这个博客留给10年后的自己
展开
-
单链表的反向输出
问题 有一个带头结点的单链表,编写算法实现从尾到头反向输出每个结点的值思路一 对于单链表而言只能顺着指针域next顺序往下搜索,所以我的第一个思路是先顺序遍历一遍将所有的数据保存在一个数组中,并记录链表的长度,之后反向输出数组就可以了,或者保存在一个栈中也可以。后来觉得这种方法有点low,于是有了第二种思路。这种算法没什么好写的,就不写了。思路二 既然可以用栈,那么可以用递归的方法实原创 2016-08-02 17:35:05 · 6576 阅读 · 0 评论 -
BFS&Python
# 邻接矩阵graph = [ [0,1,1,0,0,0,0,0], [1,0,1,1,1,0,0,0], [1,1,0,0,1,0,1,1], [0,1,0,0,0,0,0,0], [0,1,1,0,0,1,0,0], [0,0,0,0,1,0,0,0], [0,0,1,0,0,0,0,0], [0,0,1,0,0,0,0,0]]原创 2017-12-24 14:41:07 · 1445 阅读 · 0 评论 -
堆排序 Python实现(转)
堆排序堆排序是一种树形选择排序,是对直接选择排序的有效改进。 基本思想: 堆的定义如下:具有n个元素的序列(k1,k2,…,kn),当且仅当满足 [图片上传中。。。(1)]时称之为堆。由堆的定义可以看出,堆顶元素(即第一个元素)必为最小项(小顶堆)。若以一维数组存储一个堆,则堆对应一棵完全二叉树,且所有非叶结点的值均不大于(或不小于)其子女的值,根结点(堆顶元素)的值是最小(或最大)的。如:转载 2017-09-28 22:36:19 · 310 阅读 · 0 评论 -
单身狗脱单算法 脱单了算你赢
问题背景需要考虑的问题算法描述 比较懒,怎么记录方便我就怎么来了,于是随手粘贴了图片数据结构1.将男士和女士对异性好感的排序表抽象成一个二维数组MP和WP 2.创建两个数组用来记录男士和女士是否单身,其中索引表示第几位男士,存储的值表示是否脱单。例如:isManFree[0] = True # 表示第0位男士还是单身3.设计男士对女士的追求表,记录男士有没有追过这位女士,二维表中女士表示横轴原创 2017-09-21 22:28:24 · 741 阅读 · 0 评论 -
二元选择排序
二元选择排序 简单选择排序,每趟循环只能确定一个元素排序后的定位。我们可以考虑改进为每趟循环确定两个元素(当前趟最大和最小记录)的位置,从而减少排序所需的循环次数。改进后对n个数据进行排序,最多只需进行[n/2]趟循环即可 就是每次从剩下的值中选出最大值和最小值,然后分别放在前面和后面#include<stdio.h>#include<iostream>using namespace原创 2017-09-28 20:44:35 · 431 阅读 · 0 评论 -
简单选择排序 C++
简单选择排序基本思想循环n次。每次循环找出第i项以后的数中最小的数,与第i项进行交换每次循环开始时前i项时排好序的在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。/*简单选择排序*/#include<stdio.h>#in原创 2017-09-28 20:14:27 · 696 阅读 · 0 评论 -
希尔排序 Python实现
插入排序—希尔排序(Shell Sort)基本思想先将序列分成较多个子序列分别进行排序,再分成较少个子序列分别进行排序,直到最后为一个序列排序希尔排序采用每隔固定距离选取一个数的方法划分子序。其中间隔距离称为增量例如:增量为3的时候,褐色为一个子序列,黄色为一个子序列,灰色为一个子序列 每个子序列之间采用插入排序算法"""希尔排序"""def shell_insert_sort(a,d原创 2017-09-28 18:32:40 · 1416 阅读 · 0 评论 -
直接插入排序 Python实现
直接插入排序(Straight Insertion Sort)基本思想往已有的有序序列中插入需要排序的值已排序完毕的数列是有序的将第一个元素看做一个有序的序列,从第二个元素开始一直往前插入排序每次插入得到元素个数加1的新序列如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,保证插入排序是稳原创 2017-09-28 15:58:11 · 1100 阅读 · 0 评论 -
时间复杂度从O(n^3)到O(n^2)的优化
题目描述 给定由n个整数A[0],A[1],A[2],A[3],….A[n-1]组成的数组A。你想输出一个二维的n*n的数组B, 其中数组B[i,j] (i第一种解法思路For i =0,1,2,...n-2 For j = i+1,i+2,....n-1 将A[i]->A[j]的累加和赋值给B[i,j]由于要满足j>i,这样来说二维矩阵的对角线是不需要进行计算的,原创 2017-09-25 21:20:29 · 2614 阅读 · 0 评论 -
递增排序,递减排序,非递减排序,非递增排序
1,2,3,4,5,.:递增排列 9,8,7,6,5.:递减排列 1,2,3,3,4,5,8,8,.:非递减排列 9,8,7,7,6,5,5,2,1,.:非递增排列原创 2016-10-03 18:08:07 · 11968 阅读 · 0 评论 -
二叉树
简单的二叉树的创建和前中后遍历#include <stdio.h>#include <iostream>char Nil='#';//空结点的标志using namespace std;//结点定义struct node{ char data;//数据 node *leftchild;//左指针 node *rightchild;//右指针};void Cr原创 2016-08-05 22:20:49 · 261 阅读 · 0 评论 -
Dijkstra算法Python实现
Dijkstra算法迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。算法"""输入graph 输入的图src 原点返回dis 记录源点到其他点的最短距离path 路径"""import j原创 2018-01-04 19:11:42 · 3211 阅读 · 1 评论