- 博客(20)
- 资源 (6)
- 收藏
- 关注
原创 大端存储和小端存储
简述 计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型另外,对于位数大于 8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。正文 那么大
2017-05-30 10:34:27 1298
原创 内存四区模型
简述 操作系统给程序分配运行内存,分配的内存大致可以划分为四个区域,有栈区,堆区,数据区,代码区,它们还可以分为一些更细的区域,每个区域都有自己的特性和使用场景。正文1,操作系统会给每一个进程分配一个0~4G的虚拟地址空间,3~4G是内核区,1~3G是用户区2,代码区,全局静态区,堆区,共享区,栈区,命令行参数,环境变量,内核区3,命令行参数, in
2017-05-30 10:29:03 439
原创 数据结构之链表 (C++类模板实现)
简述前面用c写的链表主要使用泛型指针(void *)存储数据的地址,索引到不同类型的数据,而用C++类模板实现后可以直接存储数据,编译器会根据定义好的数据类型动态分配空间。
2017-05-29 22:50:13 1006
原创 数据结构之动态数组 (C++类模板实现)
简述前面用c写的动态数组主要使用泛型指针(void *)存储数据的地址,索引到不同类型的数据,而用C++类模板实现后可以直接存储数据,编译器会根据定义好的数据类型自动态分配空间。
2017-05-29 22:48:13 3987
原创 数据结构之栈
简述 栈是线性表的一种,他遵循先进后出的特性,其实就是封装一下,提供一些符合先进后出特性的方法,我这里用了三种方式实现了。实现一,第一种是顺序栈,就是以数组为基础实现的栈SeqStack.h#pragma once#define MAX 1024#include#include#includetypedef struct _SeqStack{ voi
2017-05-29 21:50:24 302
原创 数据结构之动态数组
简述 动态数组类似普通数组,内存空间都是连续的,可根据下标访问元素,普通数组定义时就会分配好空间,内存大小固定不变了,无法扩容,数据容易越界,但动态内存的大小会随着数据的增长而扩容。 动态数组看似内存空间在原来的基础上增长了,其实它只是申请了一块更大的内存,并把旧内存空间的数据拷贝到新申请的内存空间中,再把旧的空间释放掉,就这样一旦 发现当前内存快满,就会申请一块新的,同理,当
2017-05-29 21:12:12 711
原创 数据结构之双向链表
简述 双向链表中每个节点的指针域都有两个指针,一个指向上一个节点,一个指向下一个节点,较单项链表指针域有一个指针而言,占用资源更大,但相应的双向链表遍历的时候只需要一个指针就可以,而且只有得到其中任何一个节点就是得到整个链表,单向链表必须得到他的头节点,才能遍历整个链表,而且得有两个指针。实现BothwayLinkList.h#ifndef MYMODULE_H
2017-05-29 20:46:15 250
原创 数据结构之单向链表
概述 线性结构是一种最简单且常用的数据结构。线性结构的基本特点是节点之间满足线性关系。本章讨论的动态数组、链表、栈、队列都属于线性结构。他们的共同之处,是节点中有且只有一个开始节点和终端节点。按这种关系,可以把它们的所有节点排列成一个线性序列。但是,他们分别属于几种不同的抽象数据类型实现,它们之间的区别,主要就是操作的不同。线性表是零个或者多个数据元素的有限序列,数据元素之间是有顺序的,
2017-05-29 20:26:24 260
原创 数据结构之总述
数据结构的概念数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
2017-05-29 19:47:39 295
原创 排序算法之堆排序
简述 堆的结构是节点i的孩子为2*i和2*i+1节点,大顶堆要求父节点大于等于其2个子节点,小顶堆要求父节点小于等于其2个子节点。在一个长为n的序列,堆排序的过程是从第n/2开始和其子节点共3个值选择最大(大顶堆)或者最小(小顶堆),这3个元素之间的择当然不会破坏稳定性。但当为n/2-1, n/2-2, ...1这些个父节点选择元素时,就会破坏稳定性。有可能第n/2个父节点交换
2017-05-29 16:10:44 219
原创 排序算法之归并排序
简述归并排序是把序列递归地分成短序列,递归出口是短序列只有1个元素(认为直接有序)或者2个序列(1次比较和交换),然后把各个有序的段序列合并成一个有序的长序列,不断合并直到原序列全部排好序。可以发现,在1个或2个元素时,1个元素不会交换,2个元素如果大小相等也没有人故意交换,这不会破坏稳定性。那么,在短的有序序列合并的过程中,稳定是是否受到破坏?没有,合并过程中我们可以保证如果两个当前元素
2017-05-29 16:04:33 247
原创 排序算法之希尔排序
简述 希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序时,步长很小,插入排序对于有序的序列效率很高。所以,希尔排序的时间复杂度会比O(N^2)好一些。由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就
2017-05-29 16:00:02 213
原创 排序算法之快速排序
简述 快速排序有两个方向,左边的i下标一直往右走(当条件a[i] 而右边的j下标一直往左走(当a[j] > a[center_index]时)。如果i和j都走不动了,i j。交换a[j]和a[center_index],完成一趟快速排序。在中枢元素和a[j]交换的时候,很有可能把前面的元素的稳定性打乱,比如序列为 5 3 3 4 3 8 9 10 11现在中枢元素
2017-05-29 15:57:54 179
原创 排序算法之选择排序
简述 选择排序即是给每个位置选择待排序元素中当前最小的元素。比如给第一个位置选择最小的,在剩余元素里面给第二个位置选择次小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择时,如果当前锁定元素比后面一个元素大,而后面较小的那个元素又出现在一个与当前锁定元素相等的元素后面,那么交换后位置顺序显然改变了。呵呵!比较拗口,举个
2017-05-29 15:53:44 197
原创 排序算法之插入排序
简述插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,也就是第一个元素(默认它有序)。比较是从有序序列的末尾开始,也就是把待插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面。否则一直往前找直到找到它该插入的位置。如果遇见一个与插入元素相等的,那么把待插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改
2017-05-29 15:50:20 198
原创 排序算法之冒泡排序
简述 冒泡排序就是把小的元素往前调(或者把大的元素往后调)。注意是相邻的两个元素进行比较,而且是否需要交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把它们俩再交换一下。如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个元素相邻起来,最终也不会交换它俩的位置,所以相同元素经过排序后顺序并没有改变。所以冒泡排序是一种稳定排序算法。实现v
2017-05-29 15:34:39 207
原创 排序算法之总述
说起排序算法我第一时间想到了冒泡排序,这是我写过的第一个排序算法,也是最基本的一个算法,但他的处理效率不是很高,美国总统奥巴马都知道对于100万个量级的数据他是处理不了的。不过排序算法可不只冒泡排序一种,下面简单看看其他的吧。
2017-05-29 15:04:12 245
原创 OSG和Qt结合
简述 想使用Qt做界面开发,OSG做三维图形开发,由于Qt支持OpenGL,而OSG也是由OpenGL作为底层库开发的,所以OSG也能嵌入到Qt中。实现osgqt.h#pragma once#include #include #include #include class AdapterWidget :public QGLWidget{public: Adap
2017-05-29 14:29:46 10659 12
原创 Qt 自定义标题栏
简述 最近做的一个项目需要自定义标题栏,查看了官方文档和一些大牛写的例子,思路基本上一致,都是先设置成无边框的窗口,然后自己再自定义一个标题栏,需要实现最大化,最大化还原,最小化,关闭,窗口拖动,窗口大小拉伸。代码实在Qt4.8上实现的,可直接运行。 主要参考了两个博友的代码 前行之路还需前行和青峰碧陋室。实现mytitlebar.h#include
2017-05-20 23:22:23 2302
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人