《编程珠玑》笔记3 数据结构选择

这一章主要讨论良好的数据结构对程序的重要影响

1.调查程序:问题的关键是决定怎样用数组来存储哪些数据。

  格式信函编程:(更像是脚本程序所使用的形式)

  对于一段应用较多的程序,只有个别变量与外界输入有关,可以将这些变量以特定的参数来表示,建立一个模板,然后使用特定的发生器来解释这个模板。如:

    一个模板(schema)类似如下:

    Welcome back, $1!
    we hope you have fun in the holiday
    with $0 family.It will take $$120.
    your address: $2 $3
    date: $4

  一个发生器如下:(对于模板中的$符号,用$$来表示)

    read fields from database
    for start to end in schema
        c=getchar in schema
        if(c != '$')
            printchar c
        else
            c = getchar in schema
            case c:
                '$': printchar '$';
                '0'-'9': printstring field[c];
                default: error("bad schema")

2.一组示例

  菜单:考虑如下类型代码:

    void button0_clicked()
    {
        item0.checked = 1;
        item1.checked = 0;
        item2.checked = 0;
    }
    void button1_clicked()
    {
        item0.checked = 0;
        item1.checked = 1;
        item2.checked = 0;
    }
    void button2_clicked()
    {
        item0.checked = 0;
        item1.checked = 0;
        item2.checked = 1;
    }

    实际item可能会有更多,这些函数可以做如下简化(使用数组来代替这些item):

    void button_clicked(int choice)
    {
        for(i = 0; i < numchoices; i++)
            item[i].checked = 0;
        item[choice].checked = 1;
    }

  出错信息

  日期函数

3.用于特殊数据的工具

  超文本:(html格式文本)

  名字-值对:(多用于数据库中)

  数据库

  特定领域编程语言:如GUI,curses,openGL……这些都为特定目的的程序提供了丰富的函数库支持

4.原理

  使用数组编写重复代码;

   封装复杂结构

  尽可能使用高级工具

  从数据结构建立程序结构
5.习题

  5.1在每一税率区间都有三个值:该区间的下界S, 基本税收B,超过下界部分税收E,设计一个(S,B,E)的数据结构,并按照S排序,通过二分搜索找到相应的区间(或者直接顺序搜索也可以,这样就与if的效果相同),然后利用相应的三元组计算tax。

  5.2输入为k,a1,……,ak,c1,……,ck+1,输出为a1,……am.

    由于只给出了递归式,只能先算出ak+1, ak+2,.....,am.

    最好的办法是使用一个长为k的数组,自底向上计算,(有点像动态规划中自底向上一样)这样在计算后一个值能够确保前面的值都已知。

    如果使用一个递归程序,也就是说,在得到am时,计算am-1,am-2,...,am-k,同样递归计算am-1时,再计算am-2,am-3,...am-k-1,(这就是自顶向下的方法)这样会产生很多重复计算,效率很低。当然,也可以先申请一个数组,使用备忘录方法解决这一问题。

  5.3大写字母的图形化表示

  5.4

  5.5

  5.6

  5.7

  5.8

posted @ 2012-09-01 19:29  dandingyy  阅读(390)  评论(0编辑  收藏  举报