本周 《编程珠玑》第三章结束(关于数据结构部分)

           如何构造数据?如何数据抽象?是我们程序设计中经常遇到的问题,一个好的数据抽象可以很好的简化程序的设计,就如本章开头提到的那个例子,数据量可谓大量,如果不加分析,拿来就设计程序编码,那会造成不小的麻烦,写出的程序也是相对冗杂,层次性不够强,不具修改性。
           下面部分只是一种模拟,只使用了四个类别:
            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没怎么看明白,关于连字符按优先权分割自己好像没怎么又兴趣。后面的单词检错和数字显示,使用简单的方法不是很难。毕竟这一章只是入门,复杂优美的数据结构还有很多,以后还很经常遇到的。
           最后,送上书中提到的一句话:
           程序员在对空间缺乏无能为力是,往往会脱离代码的缠绕,胡过头去凝神考虑他的数据,这样会找到更好的方法。表示法是编码的精华。
        

你可能感兴趣的:(数据结构,编程,J#,UP)