自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 AJAX 简单理解

ajax使用 XMLHttpRequest 对象和服务器交换数据,这个对象本身是封装的一个请求,有两个方法 open(method,url,asyoyc)设置请求参数 和send(String)发送请求;setRequestHeader(header,value)设置请求头等于是客户端访问了一次服务器,请求一些数据,但并不刷新page,而是通过javascriptDOM操作把数据更新到page

2017-09-11 14:12:37 1129

原创 cookie session 和登录验证

cookie、session 简单理解cookie 和 session 的目的是追踪用户会话,标识用户,让服务器知道是谁在访问网站.cookie 是保存在客户端的用户信息,在浏览器首次访问服务器时由服务器创建并发给客户端。浏览器收到cookie后会根据cookie时效,选择将cookie内容保存在内存或硬盘。当浏览器再次访问服务器是会在请求中携带cookie。 session 是保存在服务端的用户

2017-09-11 11:58:47 565

原创 堆排序(heapsort)

堆排序堆排序是利用堆结构(特殊的完全二叉树)实现排序的算法,时间复杂度是O(nlogn)。堆排序不稳定。原理堆排序要构建一颗完全二叉树(存储在数组,详见: 二叉树的数组存储),这颗二叉树就是堆。堆有大堆和小堆两种(结构类似)。这里以大堆为例。 在最大堆中每个节点都比子节点大,根节点最大,每个分枝都是一个堆,叶子节点天然就是堆。 构成一个堆之后。然后取堆首-重新构建堆-再取… 元素按大到小依次取出

2017-08-30 16:11:34 286

原创 基数排序(radixSort)

基数排序基数排序算法的思想很有趣,他不依靠比较排序。而是采用分配式排序。基数排序也称为桶排序。原理准备10个容器,编号0-9,对应数字0-9。 然后按待排序元素的某一位的数字将其存放到对应容器中(数字相同), 再将容器中的元素从0号开始顺序收集合并,然后再从下一位开始…这里假设数组元素都是3位数。从个位开始,将数组中的元素按个位数字放入对应的桶中,再从桶中顺序取出到数组,这是数组按个位数

2017-08-30 15:32:58 341

原创 快速排序:Quicksort(2)

快速排序(1)快速排序是一种不稳定的原地交换排序(据说可以改进),其平均时间复杂度是 O(nlogn)。最坏情况下是O(n^2)。当数组已是有序或接近有序时,是最坏的情况。在示例算法中,总是选取当前块的第一个元素作为key,当数组已经有序时,一趟排序总是把数组分成一个元素和其他元素两部分(没有发挥分治的效果)。这时对n个元素的数组的排序要操作的次数是 n!。所以要避免最坏的情况,key的选择至关重要

2017-08-30 15:03:04 273

原创 插入排序

原理分析(升序)假定数组第一个数是有序的,从数组下标1开始遍历比较后面的数值。如果遍历到的数x小于排在它前面的数则交换他们,再比较x和x前面的数…直到x前面再也没有比它大的数了,这时x就移动到了有序队列的合适位置。上述比较称为插入。 《算法导论》里的比喻很合适:“插入排序就像玩扑克牌时的抓牌一样,抓一张牌,就把它插在已有扑克牌的合适位置” 注:从数组的第二个数(下标1)开始遍历就是假设第

2017-07-18 15:08:55 174

原创 归并排序

简单分析:归并排序是典型的用分治思想解决问题的算法, 其基本思想是: 有两个有序数组,从两个数组首端开始比较。将较大或较小的元素加入一个空数组中,同时在原数组中删除。剩下的元素如此重复。最后就将两个有序数组合并成一个有序数组了。这样的过程成为归并。与分治法结合在一起来考虑。如果不断递归拆分数组,直到拆分到最后只有两个元素了,也就是说把一个数组分成两边,一边只有一个元素,这是两边自然是有序的,满足有序

2017-07-18 14:45:46 220

原创 交换排序

简单描述交换排序是指通过比较键值的大小来交换这两个元素的位置,实现排序. 常见的交换排序有冒泡排序和快速排序. 冒泡排序的时间复杂度度是 O(n^2), 快速排序的时间复杂度度是 O(nlogn), 快速排序是对冒泡排序的改良.但是快速排序是不稳定的冒泡排序原理: 通过比较相邻两个数的大小来决定是否交换。 一轮比较下来,最右边的数就是最大或最小的,假设数组size=n,则需要n-

2017-07-18 14:26:30 296

原创 Huffman树

问题的由来:有一组带权节点组成的森林,每个棵树都只有一个节点,其权值是被访问的概率.那么将这个森林合并为一颗二叉树,如何使根节点到这些节点的路径最短(优)?这样的树也叫判定树或选择树,而Huffman树是是判定树的最优实现.Huffman 树实现原理在森林中每次取两个权值最小的节点,用这两个节点的权值相加得到一个新节点,并成为其的左右子节点.构成一个新的二叉树.重复上述步骤,直到只剩一棵树.这颗树

2017-07-07 16:40:07 318

原创 二叉树的数组存储及运算

二叉树的数组存储//this is tree node size#define SIZE 20//求深度//对于一个数组结构的tree,要先求tree的深度x,求最大指数2^x-1=size = 2^x = size+1 x = log2 (size+1)int getHeight2(int size){ return (int)ceil(log10((double)size+1)/

2017-06-18 12:05:51 5645

原创 二叉树的链表实现

二叉树的链表实现在构建二叉树时使用完全二叉树的特性,所以构建的是一颗完全二叉树打印二叉树打印完全二叉树要使用队列结构保存序列。将根节点存入队列,然后在while循环中将队列的第一个元素出队并将其右孩子和左孩子依次入队(如果不为null),这样的入队的顺序就按层按从左到右的顺序,出队亦是。所以可以通过调整入队顺序改变遍历顺序.以此循环遍历root及其子树,循环的条件是队列不为null.//print

2017-06-18 11:56:14 321

原创 树的定义及术语

树(tree)的定义简单讲:树就是树,是颜色不一样的烟火…(手动微笑)关于树的术语(摘自百度百科) http://baike.baidu.com/link?url=g8V1zMAkQ9cMVxsUJZZpJRT0iBkinqBJWqOUl789tfC3ufE4KvrsHfmwv-2phN9uSYfSeOuAU3QIXvZ2uSTbE2zOFbS55yPr1vc6uU3xHPa节点的度:一个节点含

2017-06-18 11:04:12 1018

原创 当我在传递指针参数的时候我在传什么?

指针传递的时候是值传递.所以create函数接收到的是指针的复制品NULL,create函数用一个新的指针指向了这个NULL.这时create里的指针和外面的指针已经完全不相干了. 所以当它修改复制品指针的指向当然无法传递出函数。

2017-06-18 10:27:51 237

转载 VS2010 调试窗口一闪而过解决方法

解决方法如下:若此时进行的操作是编译(F5),可先运行程序(Ctrl+F5),若仍然一闪而过,用下面方法解决。方法一:1.若是C++文件,在程序最后写一句(return之前)添加:system("pause");2.若是C文件,首先在程序头添加头文件:#include"stdlib.h";然后在程序最后写一句(return之前)添加:system("pause")。方法

2017-06-15 17:07:31 1073

原创 矩阵压缩存储

对称矩阵的压缩实现原理c二维数组存储在c中矩阵的表示是用二维数组。那么首先要搞清楚数组行列与矩阵行列的对应。在c语言中二维数组是按行存储的。即顺序存储每一行。(第一行,第二行。。。最后一行) 看一下例子:数组数量替换成arrs[i][j],方便说明。int arrs[i][j] = {{1,2,3}, {1,2,3}, {1

2017-06-11 11:04:01 770

原创 线性表之队列

队列的数组实现要使用模运算,关于模运算,请参加(...先挖个坑)。其实现原理是通过模运算使数组形成循环。这样就不用因为删除元素而移动数组了。就是数组的任意位置都可以是队列头和尾,这样当要求一个head+1后的位置的算法是:head = (head+1)模数组长度。要求一个下标-n后的位置的算法是:新下标 = 旧下标+(数组长度-n)模数组长度。

2017-06-10 17:08:47 264

原创 线性表之数组实现栈结构

用数组实现栈结构实现栈结构的数组实现是用一个一维数组存放数据,数据每次从队尾加入,删除时也从队尾删除,要实现这种增删操作需要使用一个记录下标的指针(top)来指向栈顶。当添加元素时添加到 arr[top+1]位置,当要做删除操作时 使top–;指向倒数第二个元素,使其称为新栈顶。旧栈顶则被忽略,当其所占空间要使用时直接覆盖即可。栈与递归栈是一种很常用的结构,比如函数调用就使用栈结构,当程序执行到函数

2017-06-10 11:14:02 200

原创 线性表之链表实现栈结构

用链表实现栈结构栈结构简单介绍栈结构通俗来说是元素先进后出,就像一个水瓶,依次往里装东西,最先装进去的被压在下面,要出来时得先拿走上面压着的东西,才能取出来。所以说栈是运算受限的线性表,因为栈只允许在表的一端进行增删。实现 本文使用单链表来实现栈结构。先构建一个带head 节点的链表,每次添加元素(进栈),使新节点->next指向head->next,使head节点指向新节点。数组结构的实现见下一

2017-06-08 21:44:16 335

原创 线性表之双链表

明天再写#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct person2{ char name[10]; int age; struct person2 *next; struct person2 *last;}person2;typedef struct linkedL

2017-06-02 23:09:40 302

原创 数据结构:线性表之单链表

单链表实现链表特点:链表是指一个数据元素含有一个或多个指向另外一个数据元素的指针或引用。称这样的元素为节点。一条链上的节点,多形象。 链表结构的元素在内存中是分散存放的。不需要连续的存储空间。空间利用率较高。可以动态增加长度。而由于元素是通过指针联系在一起的,所以插入和删除元素较快,只需要修改插入和删除位置元素的指向即可。这些是链表的优势。链表的劣势是对元素的访问只能遍历寻找(不包含特殊指向

2017-06-02 23:05:50 352

原创 数据结构:线性表之顺序表

数据结构:线性表之顺序表需求:实现线性表的数组方式实现,功能:实现数组表的增删改查实现:将各个功能单独封装到函数初始化:由于数据都不是在主函数中创建,出函数后无法使用。所以元素和元素集合(person and men)使用动态内存创建。增:将person结构体封装到men结构体中,以指针数组方式存储,每次添加一个元素并记录表长,删:删除元素,并移动元素填补空位。更新表长。释放内存。时间复杂度

2017-05-30 12:35:34 406

原创 开始写博客的些许感想

折腾了两天准备写技术博客,好让平时所学所思有个记录的地方。而且写出来还可以加深对某些知识点的理解,之前看到很多大神都推荐程序员应该写技术博客。仔细想一下写技术博客缺失有利于学习,一来算是总结,二来也是备忘。毕竟做编程要学的东西太多了。最近在学习java和web前端三大件(html、css、JavaScript)javaSE勉强学完了,web前端刚开始。我想记录这些学习过程中的知识点,把它们描述

2017-03-16 13:40:17 271

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除