- 博客(14)
- 资源 (1)
- 收藏
- 关注
原创 选择排序Select Sort
经典排序算法 — 选择排序Select Sort原理:选择排序的思想非常直接,我就从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。相比于插入排序的固定元素找位置,是两种思维方式。不过条条大路通罗马,两者的目的是一样的。 注意:先从剩下的元素中找到最小的后再交换值,而不是比较
2015-08-29 20:32:53 661
原创 冒泡排序Bubble Sort
经典排序算法 — 冒泡排序Bubble Sort原理是相邻的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子例子:从小到大排序,原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |第一趟排序(外循环)第一次两两比较6 > 2交换(内循环)交换前状态| 6 |
2015-08-29 19:48:58 635 3
原创 malloc/free函数的简单实现及思考
malloc/free函数的简单实现及思考 用于内存管理的malloc/free这对函数,对于使用C语言的程序员应该很熟悉。前段时间听说有的IT公司以“实现一个简单功能的malloc”作为面试题,正好最近在复习K&R,上面有所介绍,因此花了些时间仔细研究了一下。毕竟把题目做出来是次要的,了解实现思想、提升技术才是主要的。本文主要是对malloc/free实现思路的介绍,蓝色部分文字是在个人思考中觉
2015-08-26 22:06:58 959
原创 C内存操作函数
(1)C语言跟内存分配方式 <1>从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量、static变量. <2>在栈上创建 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. <3>从堆上分配,
2015-08-26 21:50:59 424
原创 二维数组和指针
数组名的本质是代表数组对象的变量名,是一个左值,是一个不能被改变的左值。但是由于在程序中不保存数组的大小,所以通过数组名只能访问数组的左值,不能访问数组的右值。由于这个原因,数组名在作为右值使用的时候被赋予另外一个新的意义——指向数组第一个元素的指针,这就是 array-to-pointer 转换规则。 数组名在程序中作为左值使用的情况屈指可数——在大部分情况下数组名都是作为右值使用的,
2015-08-26 21:47:30 732
原创 数组指针和指针数组
指针数组与数组指针的区别: 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。 数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。下面到底哪个是数组指针,哪个是指针数组呢: A) int *p1[10]; B) int (*p2)[1
2015-08-26 21:43:01 347
原创 C内存对齐
一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 二、为什么要字节对齐 需要字节对齐的根本原因在于CPU访问数据的效率问题。假设上面整型变量的地址不是自然对齐,比如为0x00000002,则CPU如果取它
2015-08-26 21:39:11 986 1
原创 指针和地址的区别
/* 作者:丫丫 功能:测试传递指针和传递地址不一样(以二叉树的建立分析) 结论:传递指针指针所指的不容不会被改变,而传递地址则该地址的内容会被改变 日期:2014年12月3日 */#include <stdio.h>#include <malloc.h>#include <stdlib.h>#define STACK_SIZE 50//定义二叉节点typedef struct
2015-08-26 21:13:14 1946
转载 字符串及其操作函数
字符数组和字符串 &字符数组和字符串的概念 &字符数组的初始化&字符串的输入输出 &综合举例字符数组和字符串的概念 字符数组是元素类型为字符的数组 ,它既具有普通数组的一般性质 ,又具有某些特殊性质。 字符串常量是用双引号包围的字符序列。存储字符串常量时,系统会在字符序列后自动加上 ‘/0’,标志字符串的结束。字符串的长度定义为字符串中的有效字符数,不包括结束标志 ‘/
2015-08-26 21:10:56 476
转载 内存缓冲区fflush(stdin)
内存缓冲区 1. 为什么 fflush(stdin) 是错的? 首先请看以下程序#include <stdio.h>int main( void ){ int i; for (;;) { fputs("Please input an integer: ", stdout); scanf("%d", &i); printf("%d\n"
2015-08-26 20:57:22 662
原创 printf函数参数压栈顺序
printf函数的参数的压栈顺序和求值顺序(VC++6.0编译器) 有以下程序段: 设int arr[]={6,7,8,9,10}; int *ptr=arr; *(ptr++)+=123; printf("%d,%d",ptr,(++ptr)); 答案为什么是:8,8 这是一道华为面试题。 这个题考的关键就是printf的运算顺序。这个是比较绕的一个问题,主要考验的是i++ 和++
2015-08-26 20:51:43 1897 1
原创 C语言程序内存结构
一个32位的运行在保护模式下应用程序,无论是Linux 还是Windows 都给它分配一个4GB的平坦的内存空间一个运行着的c程序所占用的内存空间分为: 代码区 初始化数据区 未初始化数据区 堆区 和 栈区 在地址上从高位到地位为(高位) 栈区 堆区 未初始化数据区(即BBS) 数据区 代码区 (低位)栈区存放函数的参数值、局部变量的值 , 由编译器自动分配释放 比如实现函数的
2015-08-26 20:46:17 624
转载 scanf函数详解
函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,…]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。 其调用格式为: scanf(“<格式化字符串>”,<地址表>); scanf()函数返回成功赋值
2015-08-26 18:35:30 925
原创 scanf函数加空白符
scanf加空白符之后的效果:空白符 : 空格(space)、TAB、回车(\r)、换页(\f)、换行(\n)while((c = getchar()) == ’ ’ || (c = getchar()) == ‘\t’ || (c = getchar()) == ‘\n’);//跳过空白符、注意while语句后面是分号while((c = getchar()) == ’ ’ || (c = get
2015-08-25 23:05:29 1433
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人