如何构造数据?如何数据抽象?是我们程序设计中经常遇到的问题,一个好的数据抽象可以很好的简化程序的设计,就如本章开头提到的那个例子,数据量可谓大量,如果不加分析,拿来就设计程序编码,那会造成不小的麻烦,写出的程序也是相对冗杂,层次性不够强,不具修改性。
下面部分只是一种模拟,只使用了四个类别:
page1和page2的数据分别保存在数据count1、decline1和count2、decline2,另外offset[]的存在在一定程度上为这种实现提供了一种可能,即构建循环体,保证循环的进行。
除了这个例子外,本章的课后习题没怎么做,实现起来不是很难,习题3的banner函数没想出来怎么构造,好像字符数组要自己一个个书写(似乎就是这么简单繁琐)。习题5没怎么看明白,关于连字符按优先权分割自己好像没怎么又兴趣。后面的单词检错和数字显示,使用简单的方法不是很难。毕竟这一章只是入门,复杂优美的数据结构还有很多,以后还很经常遇到的。
最后,送上书中提到的一句话:
[color=green][b]程序员在对空间缺乏无能为力是,往往会脱离代码的缠绕,胡过头去凝神考虑他的数据,这样会找到更好的方法。表示法是编码的精华。[/b][/color]
下面部分只是一种模拟,只使用了四个类别:
page1和page2的数据分别保存在数据count1、decline1和count2、decline2,另外offset[]的存在在一定程度上为这种实现提供了一种可能,即构建循环体,保证循环的进行。
while (infile>>entry[0]>>entry[1]>>entry[2]>>entry[3])
{
//summary up to page1 or page2
if (entry[1] == 1 && entry[0] != 0)
{
//total
count1[entry[0]-1][0] ++;
for (j = 2;j < N;++ j)
{
if (entry[j] != 0)
{
//answer the question
count1[entry[0]-1][entry[j]-1+offset[j]] ++;
}
else
{
//decline the question
decline1[entry[0]-1][entry[j]-1+offset[j]];
}
}
}
else if (entry[1] == 2 && entry[0] != 0)
{
//total
count2[entry[0]-1][0] ++;
for (j = 2;j < N;++ j)
{
if (entry[j] != 0)
{
//answer the question
count2[entry[0]-1][entry[j]-1+offset[j]] ++;
}
else
{
//decline the question
decline2[entry[0]-1][entry[j]-1+offset[j]];
}
}
}
}
除了这个例子外,本章的课后习题没怎么做,实现起来不是很难,习题3的banner函数没想出来怎么构造,好像字符数组要自己一个个书写(似乎就是这么简单繁琐)。习题5没怎么看明白,关于连字符按优先权分割自己好像没怎么又兴趣。后面的单词检错和数字显示,使用简单的方法不是很难。毕竟这一章只是入门,复杂优美的数据结构还有很多,以后还很经常遇到的。
最后,送上书中提到的一句话:
[color=green][b]程序员在对空间缺乏无能为力是,往往会脱离代码的缠绕,胡过头去凝神考虑他的数据,这样会找到更好的方法。表示法是编码的精华。[/b][/color]