博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C Primer+Plus(十七)高级数据表示 复习题
阅读量:6516 次
发布时间:2019-06-24

本文共 2635 字,大约阅读时间需要 8 分钟。

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

 

 

转载于:https://www.cnblogs.com/tsembrace/p/3191812.html

你可能感兴趣的文章
【网络协议】TCP协议简单介绍
查看>>
利用SMB jcifs实现对windows中的共享文件夹的操作
查看>>
Spring(十七):Spring AOP(一):简介
查看>>
html5常用属性text-shadow、vertical-align、background如何使用
查看>>
微软正式宣布Azure MongoDB Atlas免费方案
查看>>
Jessica Kerr:高绩效团队简史
查看>>
开发者需要知道的有关软件架构的五件事
查看>>
GitLab 9提供了子群组、部署面板和集成监控
查看>>
继爆款超级账本后,IBM再次推出新产品
查看>>
贝壳金控赵文乐:基于 Spring Cloud 的服务治理实践
查看>>
Pyspider框架 —— Python爬虫实战之爬取 V2EX 网站帖子
查看>>
区域生长算法 C++实现
查看>>
数据分析-从入门到崩溃
查看>>
web.xml 中的listener、 filter、servlet 加载顺序
查看>>
MyBatis原理简介和小试牛刀
查看>>
js部分基础
查看>>
Docker 常用基础命令
查看>>
脏读,幻读,不可重复读解释和例子
查看>>
Day02 数值运算&条件判断
查看>>
Tomcat指定(JDK路径)JAVA_HOME而不用环境变量
查看>>