zoukankan      html  css  js  c++  java
  • C Primer+Plus(十七)高级数据表示 复习题

    1、定义一个数据类型包含什么?

    包含数据本身的定义及其操作的定义。

    2、为什么程序清单17.2中的链表只能沿一个方向遍历?怎样修改struct film的定义才能双向遍历链表?

    每个节点只记录了下一个节点的地址。

    strcut film

    {  char title[TSIZE];

        int rating;

        struct film *previous;    //指向前序节点

        struct film *next;

    }

    3、什么是ADT?

    抽象数据模型,用户自定义的数据类型,包括数据的存储、组合方式以及可实现的操作。

    4、QueueIsEmpty()函数以一个指向队列的指针为参数,但它本可以编写成接受一个queue结构作为参数。两张方式的优缺点各是什么?

    指针作为参数,需要加const关键词进行限制,函数实质是对实参队列在进行判断;如果以结构作为参数,函数是对实参队列的副本进行判断。

    5、栈是列表家族的另外一种数据形式。在栈中进行添加删除只能在列表一端进行。项目被描述成“压入栈顶”和“弹出堆栈”。即LIFO结构(Last in First out).请设计一个栈ADT,并为其设计C接口。

    typedef int Item;  
    
    typedef struct node
    { 
      Item item;
      struct node *next;
    }Node;      
    
    typedef struct stack
    {
       Node *top;
       Node *bottom;
       int items;
    }Stack;
    
    /*函数原型                         */
    /*操作:初始化堆栈                 */
    void InitializeStack(Stack *ps)
    {
      ps->top=NULL;
      ps->bottom=NULL;
      ps->items=0;
    }
    
    /*操作:判断堆栈是否为空              */
    /*操作前:ps指向一个已初始化的队列    */
    /*操作后:若空返回true,否则返回false  */
    int StackIsEmpty(const Stack *ps)
    {
      return ps->items==0;
    }
      
    
    
    /*操作:判断Stack是否满                */
    int StackIsFull(const Stack *ps)
    {
      return ps->items==MAXQUEUE;
    }
    
    
    /*操作:确定堆栈中项目数量            */
    int StackItemCount(const Stack *ps)
    {
       return ps->items;
    }
    
    
    /*操作:在堆栈顶部添加新项目                               */
    /*操作前:ps指向一个已初始化的堆栈,item是要被添加的项目    */
    /*操作后:如果添加成功,返回true,否则返回false             */
    int PushStack(Item item,Stack *ps)
    {  Node *pnew;
       if(StackIsFull(pq))
           return 0;
       pnew=(Node*)malloc(sizeof(Node));
       if(pnew==NULL)
           return 0;
       pnew->item=item;
       if(StackIsEmpty(ps))
       {   ps->top=pnew;
           pnew->next=NULL;
       }
       else
       {
           pnew->next=ps->top;
           ps->top=pnew;
       }
       ps->items++;
       return 1;
    }
    
    
    /*操作:从堆栈顶部删除项目                                        */
    /*操作前:ps指向一个已初始化的队列                                */
    /*操作后:如果堆栈非空,顶部项目被复制到*pitem                */
    /*        并被从堆栈中删除,函数返回true;如果这个操作使队列为空   */
    /*        则把堆栈重置为空队列;如果堆栈开始就为空,返回false     */
    int DeStack(Item *pitem,Stack *ps)
    {
      Node *temp;
      if(StackIsEmpty(ps))
          return 0;
      *pitem=ps->top->item;
      temp=ps->top;
      ps->top=ps->top->next;
      free(temp);
      ps->items--;
      if(ps->items==0)
         ps->bottom=NULL;
      return 1;
    }
      
      
    
    /*操作:  清空堆栈                      */
    /*操作前:ps指向一个已初始化的堆栈      */
    /*操作后:堆栈为空                      */
    void EmptyTheStack(Stack *ps)
    {
      Item *pitem;
      while  (!StackIsEmpty(ps))
         DeStack(pitem,ps);
    }

    6、当在一个含有3个项目的列表中判断某一特定项目在不在该列表中时候,顺序搜索和折半搜索需要进行的比较次数最多分别为多少次?当列表中有1023个项目时呢?有65536个项目时呢?

    3次、2次;

    1023次、log2^1024;

    65536、log2^65536+1;

    7、假设某程序使用本章介绍的算法构建了一个存储单词的二叉搜索树。假设单词按照下列顺序输入,画出每种情况的树:

    a.nice food roam dodge gate office wave

                             nice

                     food              roam

              dodge   gate    office  wave

    8、考虑复习题7构建的二叉树,依照本章算法,删除单词food后,各个树分别是什么样?

                             nice

                    dodge          roam

                         gate    office  wave

  • 相关阅读:
    vault验证导出领域对象导入新的shecma是否生效
    开启vault下如何使用expdp
    vault创建领域不让sys/system访问,但是可以让其他用户访问
    vault应用例子(禁止sys用户访问其他用户下的表)
    11g关闭vault
    11g配置vault
    11g单节点配置em
    vue中 js获取图片尺寸 设置不同样式
    vue 模块化 路由拆分配置
    vue 弹窗时 监听手机返回键关闭弹窗(页面不跳转)
  • 原文地址:https://www.cnblogs.com/tsembrace/p/3191812.html
Copyright © 2011-2022 走看看