
数据结构和算法
深夜程猿
技术公众号:深夜程猿
展开
-
递归和循环的效率问题
运行下面程序,可以看到递归需要的时间比循环多。#include <stdio.h>#include<windows.h>int main(int argc, char *argv[]){//循环 PrintN(1000); /** 递归 DWORD startTime, endTIme; startTime=GetTickCount();转载 2016-09-13 22:36:31 · 1486 阅读 · 0 评论 -
归并排序
归并排序使用了分治思想,操作模式如下:1 分解 分解待排序的n的元素成各具n/2个元素的两个数组2 解决 使用归并排序递归地排序两个数组3 合并 合并两个已排序的数组//上面的三个步骤会被递归调用下面我们来看看合并步骤的伪代码MERGE(A,p,q,r) // p<=q<r1 n1=q-p+12 n2=r-p3 let L[1..n1+1] and R[1..n2+1] be new ar原创 2017-05-06 10:58:21 · 265 阅读 · 0 评论 -
二叉堆和堆排序
(二叉)堆是一个数组,它可以近似看作完全二叉树。树上的每一个节点对应数组中的一个元素。除了最底层,该树是完全充满的,而且是从左向右填充。 根据节点下标可以求出对应的子树和双亲 PARENT(i) return [i/2] //i表示数组中的第几个元素,[i/2]表示取整数 LEFT(i) return 2*i RIGHT(i) return 2*i+1二叉堆可分为原创 2017-05-04 17:17:44 · 620 阅读 · 0 评论 -
二叉堆和优先队列
优先队列是一种用来维护由一组元素构成的集合S的数据结构,其中的每一个元素都有一个相关的值,称为关键字。优先队列有最大优先队列和最小优先队列。 优先队列和一般的FIFO队列不一样,从优先队列获取出来的值是哟优先顺序的。例如,用来处理发送给计算机部门打印机的职位:部门主管发来的职位应该首先被打印,依次是经理,研究生和本科生。放到优先队列的值应该是发送的优先顺序(比如主管是5,经理是3,研究生是2,大学原创 2017-05-04 20:45:16 · 405 阅读 · 0 评论 -
AES和RSA加密算法入门Demo
首先感谢博主开园精神,此博客是个人结合博主博文来进行一次个人的总结,加深学习印象。博主已经总结的非常的不错,大家可以参考博主原文博主博客地址 资料参考: 博主源码下载 百度百科Java中有对称加密和非对称加密。 对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,原创 2017-04-05 18:58:17 · 4275 阅读 · 0 评论 -
C语言实现构建二叉树
#include <stdio.h>#include <stdlib.h>#include <malloc.h>typedef int ElemType;typedef struct BTree{ struct BTree *leftChild; ElemType data; struct BTree *rightChild;}BT,*b_tree;/** 增加新节点原创 2017-04-03 17:00:54 · 1138 阅读 · 0 评论 -
快速排序C实现
参考资源:《啊哈!算法》#include <stdio.h>void quickSort(int *arr,int left, int right){ if(left>right)//跳出递归的条件 return; int i,j,temp; temp=arr[left];//选取第一个数为基数 i=left; j=right; wh原创 2017-04-10 12:56:16 · 345 阅读 · 0 评论 -
数据结构之队列
#include<iostream>using namespace std;typedef int ElemType;typedef struct QueueNode node;typedef struct QueueNode *link;struct QueueNode{ ElemType data; struct QueueNode *next;};link fro原创 2017-03-30 10:03:43 · 254 阅读 · 0 评论 -
C语言实现栈的基本操作
#include <stdlib.h>#include <stdio.h>typedef int ElemType;typedef struct Stack *link;typedef struct Stack SNode;struct Stack{ ElemType data; struct Stack *next;};/** * 初始化栈 */link ini原创 2017-03-30 09:35:58 · 452 阅读 · 0 评论 -
C语言实现单向链表的常见操作
#include <stdlib.h>#include<stdio.h>typedef int ElemType;//以ElemType代表int型数据typedef struct List *link;//以link代表链表指针typedef struct List LNode; //以LNode代表链表节点struct List{ ElemType data;//数据域原创 2017-03-29 20:15:01 · 316 阅读 · 0 评论 -
Java实现一个二分查找
import java.util.*;public class BinarySearch { public int getPos(int[] A, int n, int val) { int position=-1; //返回的数组的位置 int low=0,high=n-1,mid=n/2; if(n<=0||A==null){// 数组为空原创 2017-02-27 17:45:18 · 455 阅读 · 1 评论 -
线性表(顺序表)
线性表的定义线性表是由(n>=0)个数据元素(结点)a[0],a[1],a[2]……a[n-1] 组成的有限序列。其中,一个数据元素可以由若干个数据项组成。数据元素称为记录,含有大量记录的线性表称为文件。 线性表存在以下特点存在一个唯一没有前驱(头)的数据元素存在一个唯一没有后继(尾)的数据元素此外,所有数据元素都有一个前驱和后继线性表的存储结构1 顺序表 2 链表单链表(动态单链原创 2016-10-03 21:45:44 · 467 阅读 · 0 评论 -
插入排序(Java实现)
package unit_2;/** * 插入排序算法采用增量模式,每次把第j个数插入有序的A[0...j-1]中 生成另外一个有序的数组。 * 最佳情况复杂度:O(n) * 最坏情况复杂度:O(n^2) * @author WuNanliang * */public class InsertSorted { public static void main(String[] ar原创 2017-08-02 23:32:42 · 288 阅读 · 0 评论