C/C++
hober.z
修炼
展开
-
静态链表的原理及实现
静态链表是一种使用数组模拟链表的方法,在某些不支持指针的语言中,可以用它来模拟链表。静态链表使用一个数组,但是该数组通过下标指向连成两个“链表”,一个用来存储尚未存放数据的节点,另一个存储已经存放数据的节点。静态链表的数据结构如下:#define MAXSIZE 1000typedef struct{ int data; int cur;}List,Linklist[MAXS原创 2017-03-18 10:04:21 · 1457 阅读 · 0 评论 -
c++学习笔记
----------引用的实质类似于c语言中的常指针int a=10;int &b=a;//此句类似于int const *b=a;以此类推,常引用const int &b=a;//类似于const int const *b=a;因此可以自然的想到,引用的存储类似于指针的存储因此下例中,结果为4#include using namespace std;struct AA{原创 2015-12-02 21:23:05 · 598 阅读 · 0 评论 -
多操作符的语义判断(如 int& *a和int* &a)
C++语言经常会有涉及到多操作符的变量或者数组定义,怎么判断其语义着实让人费解,下面谈谈我的个人理解。 首先用一个小小的测试程序: #include <iostream.h> void main() { int intOne = 6; int& rInt=intOne; int *pp=&intOne; // int& *p = &...原创 2015-11-07 20:33:02 · 473 阅读 · 0 评论 -
C++中返回值为对象详解
以下以一个例子说明C++中返回值为对象的过程详解。#include <iostream>using namespace std;//建一个Test类class Test{public: Test() { a = 0; b = 0; cout << "无参构造函数被调用了" << endl; } Test(int aa, int bb...原创 2015-12-07 15:52:26 · 7756 阅读 · 6 评论 -
Qt发布可能遇到的问题
1.首先要搞清楚动态链接库还是静态链接本文只涉及动态链接库,就是编译出来的exe文件加上Qt 的必要dll文件。一般跟别人一样的操作,直接双击 XX.exe,提示缺少什么dll,就去Qt的安装目录下的bin文件夹里去找。我找的目录是D:\Qt\Qt5.2.0\5.2.0\msvc2010\bin2. This application failed to start because it could...转载 2016-05-18 22:09:54 · 507 阅读 · 0 评论 -
shell排序法
原理 Shell排序法又称为缩小增量排序法,也属于插入排序类的算法,是对直接插入排序的一种改进。 其基本思想就是:将需要排序的序列划分为若干个较小的序列,对这些序列进行直接插入排序,通过这样若干次操作可使需要排序的数据基本有序,最后再使用一次直接插入排序。这样,首先对数量较小的序列进行排序,最后对基本有序的序列进行排序,从而使整个排序过程的效率得到提升。实现void shellSort(in原创 2017-08-15 09:54:29 · 548 阅读 · 0 评论 -
快速排序法
原理将待排序的序列分为两部分,选用一个基准值,一部分序列的值大于这个基准值,一部分序列的值小于这个基准值。这样一直递归下去,直到完成整个序列的排序。实现void quickSort(int a[],int low,int high){ if(low>=high) return ; int left,right,key; left=low; right=high; key原创 2017-07-26 09:25:58 · 217 阅读 · 0 评论 -
归并排序
原理归并排序使用这样一种思路:1.将待排序的n个元素序列分解为两个n/2个元素序列,一直递归到序列元素个数为12.使用归并排序递归地排序两个序列3.依次合并两个已排序的子序列,直至完成排序实现#define MAX 999#define MAXSIZE 10void merge(int a[],int l,int m,int r){ int i,j,k; int原创 2017-08-01 14:50:45 · 290 阅读 · 0 评论 -
直接插入排序
原理直接插入排序法的原理是:每次将一个值按照排序规则插入已经排好的序列中,直到所有值都插入。默认一个值为一个有序序列。实现void insertionSort(int a[],int n){ int i,j,tmp; for(i=1;i<n;i++) { for(j=i;j>0;j--) { if(a[j]<a[j-1]) { tmp=a[j];原创 2017-07-22 09:29:48 · 236 阅读 · 0 评论 -
冒泡排序
原理冒泡排序的原理是相邻两个数比较,如果不满足排序规则,就交换这两个数。这样一个循环下来,就能确定一个(相对最大/最小)数的位置。一共n个循环下来,就能确定排列的顺序了。实现void BubbleSort(int a[],int n){ int i,j,t; for(i=0;i<n;i++) { for(j=0;j<n-i-1;j++) { if(a[原创 2017-06-28 09:39:52 · 205 阅读 · 0 评论 -
选择排序
原理选择排序的思路是每次从待排序序列中找出最小/大的,放在序列的始端。每一次排序固定一个数,依次将这个数与剩下的数比较,比较完成之后得到一个最小/大的数,这时再判断是否与这个数交换。这样就确定一个数的位置。n-1次之后,即完成了一个n序列的排序void SelectionSort(int *a,int n){ int i,j,min,tmp; for(i=0;i<n-1;i+原创 2017-06-30 09:39:33 · 182 阅读 · 0 评论 -
快速理解字节对齐问题
规则字节对齐的细节和具体编译器实现相关,但一般而言,满足三个准则:1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;2) 结构体每个成员相对于结构体首地址的偏移量都是该成员大小的整数倍,如有需要编译器会在成员之间加上填充字节。3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。【数组的基本类型为数组每个元素的类型,与数组的大小无关,...原创 2017-05-03 23:47:23 · 564 阅读 · 0 评论