高级C话题
文章平均质量分 75
fengxiaoke_fxk
东北大学
展开
-
有符号位的char的范围详解。(求高手指点)
计算机以二进制补码存储数值,当一个具有符号位的数据值储存在计算机中的时候,计算机会以最高为符号位,其余位数取该数绝对值的二进制补码来储存。这里以signed char类型在32位电脑中储存范围的计算为例:先看正数最大值,正数的原码就是其补码,将符号位置为0,其余位全取1便可以得到最大值:127(0111 1111)主要看一看负数最小值,负数的补码是先得到其绝对值原创 2012-05-04 17:19:59 · 4147 阅读 · 5 评论 -
数据结构----二叉树非递归实现
/*********构造二叉树*********/输入一串以二叉树先序序列遍历的字符,空格表示空指针。比如这串字符:ABD123CE4F5G678(为方便阅读,以数字代替空格),以先序顺序逆推出的二叉树应是:从中观察出构造二叉树的算法:以字符串的遍历为循环条件,构造一个栈来存放左右孩子指针都未被赋值的节点,空指针不允许入栈。(1)循环开始前,让头节点先入栈(2)st原创 2012-08-05 15:58:00 · 2959 阅读 · 0 评论 -
数据结构之二叉树的非递归实现及“狡猾”的指针
先说说我实现二叉树的方法,才能开始讲述我被指针搞得晕头晕脑的痛苦经历。/****************二叉树非递归的总体分析*****************/(1)建立二叉树栈的应用:用空格键表示空指针,我们利用栈来保存左右孩子指针未都被赋值的节点,空指针不允许入栈开始建立:以循环遍历用户输入的字符串来建立二叉树,如:"AB#D##CE###"(这里先用#代替空格,方便查看)原创 2012-06-30 17:28:37 · 2160 阅读 · 2 评论 -
C专家编程精华篇----头疼的C语言声明:const、typedef、define及函数高级声明
**************const有关的变量声明*****************(1)const == read-onlyconst修饰的变量被许多人错误的认为是常量,但是const所修饰的变量应该是只读变量检验这个结论可以用下面这个方法:const int two = 2;switch(i){case 1: printf("case 1.\n");case tw原创 2012-06-24 22:44:17 · 13507 阅读 · 16 评论 -
C专家编程精华第二篇----C对内存的使用,底层探索
这里以Linux中C编程为例,有些东西可能在不同的系统中处理是不一样的/**************运行时:内存的布局****************/以下面这段程序为例:// A:未初始化的全局和静态变量int array[40];static int num1;// B:初始化后的全局和静态变量int num2 = 10;static int num3 = 15;i原创 2012-07-04 17:09:30 · 1268 阅读 · 0 评论 -
数据结构之双向链表的实现
*****双向链表的实现*****双链表就可以看成两个单链表组合成的,只是相比单链表而言,它能从两个方向进行遍历链表,目前还不知道这有什么优势,因为当我们想查找一个元素时,并不知道一个有序的链表里面这个被查找的元素离哪一边较近。(1)双链表的结构与单链表有点不一样,它要保证从链表的任意一端都能遍历链表,所以下面是双链表里面的结点的结构:typedef str原创 2012-05-25 20:57:26 · 2075 阅读 · 0 评论 -
数据结构之单链表的实现
*****单链表的实现*****我们在这里只实现单链表里面最常见的几个操作,如果有新功能会进行更新。《数据结构》一书中讲了线性表的有关算法,实现的数据类型有:静态数组、动态数组、单链表、循环链表和双向链表,这里,我实现了在实际开发中应用比较广阔的两种的数据结构:单链表和双向链表。(1)单链表的结构定义:typedef struct list{ int data;原创 2012-05-17 21:51:27 · 725 阅读 · 0 评论 -
如何从函数中获取动态内存
我们先看一个简单的例子:void func(char *_str){ char *p; strcpy(p,_str);}int main(){ char *str = "abcdefg"; func(str); system("pause"); return 0;}我们之所以把形参命名为_str只是为了与实参原创 2012-05-13 22:45:58 · 740 阅读 · 2 评论 -
数据结构之栈的应用----迷宫求解
/***********程序设计思想*************/(1)迷宫地图相关:利用动态二维数组来初步勾勒出迷宫:建议先用malloc申请一维数组,再用calloc申请每个元素中的一维数组,因为我用的是1来表示迷宫的通路,0表示死路,calloc申请完后就会自动初始化为0迷宫交岔路结点:我们要有一个扫描通路的函数,对一个坐标进行东南西北的扫描,当遇到交岔路的坐标时,需要将所原创 2012-06-05 20:16:42 · 2346 阅读 · 3 评论 -
数据结构之栈的应用----算术表达式的实现
这次所讲的是又一个栈的应用:算术表达式这个程序是栈的应用的典型例子,是很好的栈的诠释,这个程序在K&R的书上也被叫做逆波兰计算器/**********算术表达式的设计思想***********/(1)首先,根据四则运算表达式,我们要先了解到其计算规则:括号为界限符,其优先率最高,其次为运算符*和/,最后为+和-;(2)然后,我们根据把一个算术表达式划分为:开始('#')、运原创 2012-05-29 13:36:52 · 2309 阅读 · 0 评论 -
数据结构之栈的应用----C程序的括号配对检查
这周学完了严老师的栈及其应用。已经对栈的应用有了一定的了解了,并且感觉到数据结构实在是很强大,它几乎可以解决我们生活中的大部分问题。关于栈的基本常识,这里不做过多的解释,总之,其核心就是先进后出(FILO)联想到这种模式我们就可以很容易的知道,栈可以有如下几种应用:1、进制之间的转换2、C程序的括号配对检查3、迷宫求解问题4、算术表达式求值5、递归函数.....原创 2012-05-26 19:01:49 · 2282 阅读 · 1 评论 -
利用二叉搜索树来实现输入文本的单词统计
这里有个题目,输入一个文本(纯英文),我们要能够得到文本中每个单词出现的个数,并且按照字典顺序输出。解决这个题目可以利用二叉搜索树,这是一个比较好理解的方法,它将整个文本单词分解从根部(root)延伸,当输入的单词比上一个大,就连接到此节点的右边,若小,则连接到左边,这样就可以轻易的将他们有序的连接了。首先,我们需要一个结构体来提供储存单词和单词出现的次数,定义如下:str原创 2012-05-01 16:45:21 · 2385 阅读 · 0 评论 -
数据结构之各种排序的比较
(一)直接插入排序算法简洁,但是只有当待排元素n比较少的时候效率才高所需空间:一个当前元素的哨兵array[0]即可所需时间:主要与所需关键字的比较次数及移动的次数有关最坏的情况——逆序:总的比较次数为n(n-1)/2,记录的移动次数也为n(n-1)/2最好的情况——正序:比较次数为n-1,记录移动次数为0由此可以推断出插入排序算法的平均时间为O(n^2),最坏的情况为原创 2012-09-02 00:07:27 · 4871 阅读 · 5 评论