- 博客(10)
- 收藏
- 关注
原创 异或指针双链表的创建、打印(严奶奶数据结构练习2.34)
异或指针双向链表的每一个节点内,只用LRPtr域来存储前后节点指针的异或值。通过 a^(a^b)=(a^a)^b=b (a^b)^b=a^(b^b)=a来实现求取前后节点指针的实现。同时,节点XorLinklist存放异或指针双向链表的头结点、尾节点的地址。将节点指针转换为无符号整型进行异或,返回一个指针类型的异或值。代码如下:#includ
2013-10-18 23:28:45 788
原创 在一个文件集合中查找匹配模式的行 (TCPL,练习7-7)
这类要求最关键的地方在于:如果要使程序更加有用,最好不要对文件集合的大小加以限制。因此,类似于文件指针一类的变量,如果采取本例的如 FILE *p[MAX],尽管MAX的值是一万,也就是说允许在一万个文件内查找模式匹配——这在大多数情况下都能够应付,但仍然不尽完美。因此,可以改良的地方在于,数组dir[MAX]存放输入的文件名(有可能是命令行参数也可能从stdin端输入)应该替换成一个不断申请
2013-09-21 12:04:51 651
原创 打印文本中的所有单词,并且打印每个单词出现的行号,非实义单词不考虑(TCPL,练习6-3)
建立一棵二叉树,每个接单存放单词以及指向一个链表的指针,以及指向左右节点的指针。链表内存放行号以及指向下一个链表节点的指针。每录入一个单词,先寻找二叉树,再寻找它的链表,分别将单词和行号插入二叉树和链表,这样,每一个单词自然就有一个属于它的行号链表。最后打印。代码如下:#include#include#include#include#define MA
2013-09-18 09:55:06 911
原创 读入一个c程序,并按字母表顺序分组打印变量名,每组前N个字符相同(TCPL 练习6-2)
在建立结构tnode的过程中,我们没有预设门槛。这道题目就设置了门槛,必须根据前N个字符来进行分组,于是排除了长度小于N的变量,以便减轻负担。因为要求对变量名分组打印,组别理所应当地应该按照至少是升序来排列,在每一组内,也至少应该是升序排列(以字母顺序),于是构造一棵二叉树,它的每一个节点都指向另一棵二叉树,即一棵由二叉树构成的二叉树。这样,在我们对每一个母二叉树的节点进行访问的时候,也可以遍
2013-09-17 16:43:34 1811 1
原创 对文本行按特定字段排序(前N个字符或后N个字符),TCPL 练习5-17
The C programming language 的关于文本行排序的问题有很多种要求的方式,在对每行的字段排序方面,最简单的是例如对前N个字符或者末位N个字符进行排序,更高一点的要求是,对特殊符号标识的字段排序,例如,对逗号前的字段进行排序能,标识符号要尽可能地自定义,这里的程序实现了前者,即依据命令行参数N,对每行的前N或者后N个字符排序,当然,也实现了和-f(忽略大小写),-d(只对空格数
2013-09-15 14:31:55 657
原创 对文本行进行排序,新增-d(目录排序),只对字母数字空格排序(TCPL 练习5-16)
文本行的排序用到了命令行参数以及多级指针,在要求只对字母数字空格进行排序时,关键的问题点是兼容-f命令参数,也就是排序的同时忽略大小写。由于在之前的练习中,我将忽略大小写的比较方法重新写了一个函数transfercmp(),于是无法再sort排序程序中同时调用他们。因此,不得不增加一个外部变量uptolow,用来在只对字母数字排序的函数inpuntcmp()中兼容忽略大小写的排序方式。
2013-09-12 19:21:01 602
原创 逆波兰计算器,实现了对exp、sin、pow等的支持(TCPL 练习4-5)
要求支持sin、exp、pow等库函数,首先要从输入中识别出他们。在之前的基础上增加字母为字符数组判别选项,累计字母字符串,再通过string.h提供的库函数,确认输入是否为exp等库函数操作。比较两个字符串相等是通过strcmp和strlen两个函数实现的,前者只能返回一个字符串包含另一个的情况,再通过比较两个字符串的长度是否相等实现其完全相等与否的判别。代码如下:#includ
2013-08-30 19:21:08 853
原创 逆波兰计算器,实现对负数的支持(TCPL,练习4-3)
关于逆波兰计算,(5-3)*2 表示为 5 3 - 2 *这样的表示中,是不支持负数的,因为所有出现的“-”都会被认为是“减号”,例如5*(-3),逆波兰表示为5 -3 * ,按照规则,遇到“-”时,取栈顶的两位,便会报错(只有一个5)。因此,为了支持负数,可以引进一个符号位,标记可能出现的负数。尝试引进左括号“(”,于是上式便可以写为 5 (-3 * 作为标识符,为了延展通用性,即便是正
2013-08-30 16:28:22 2574
原创 编写函数itob,将整数n转换为以b为底的数(The c programming language 练习3-5)
这是一道将十进制整数转换为b进制(b为整数)的题目。理论上可以转换任意b进制(1除外),但是由于输入限制(只使用getchar()),只能制定10以内的b,因此如果要尽可能地接近理想情况,需要编写一个将字符串转换为数字的函数。以下为不能完全实现任意转换的版本:#includechar itob(int n, char s[], int b); /* 编写函数 itob,使其输出n的b进制,储
2013-08-27 22:40:38 1431
原创 关于编写一个函数invert(x,p,n),返回x循环右移n位后得到的值,the c programming language 第二章练习2-8
这个函数的一个关键点在于,如果想移植性更好的话,得先要找到类型的位数。对于右移循环,能够尽量少地增加新的变量作为缓冲最好。
2013-08-21 23:52:40 1267
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人