Page 57 - 高中 信息技术 选择性必修1 数据与数据结构
P. 57

第二章 数据的存储方式                                                                                       2.3 数据的链式存储与组织









                         如图2-11所示是单向链表的几种基本操作示意图。









                              (a)空链表
                                                                             (b)插入结点





                                             广东教育出版社

                                                         (c)删除结点
                                                 图2-11 单向链表的基本操作示意图


                         由于链表可以实现灵活的内存动态管理,因此在数据的组织上有许多应用,如操作系
                    统软件的实现中,大量使用各种链表存储系统信息,包括设备列表、内存分配信息、进程
                    信息等。在很多应用软件中也会使用链表存储和处理数据,例如地图导航软件、网络数据

                    包的记录等。
                         利用一维数组存储一元多项式时,数组的下标与项的指数对应,数组元素保存该项的
                                                                                   100
                                                                                         3
                    系数,这样存储简单明了。但是对于类似这样的多项式:3x +5x -2x+10,最少需要具有
                    101个元素的数组来保存,其中绝大部分的元素为零,不仅浪费空间,而且在进行多项式
                    运算时,其执行效率也不高。如果采用链表来存储这样的多项式,则方便多了。用链表存
                    储多项式,链表的每个结点对应一个项,只需要存储系数不为0的项,但如果采用这种方
                                                                                           3
                                                                                     100
                    式,就不仅要存储项的系数,还要存储项的指数。以多项式3x +5x -2x+10为例,下面的
                    代码定义了多项式的链表结构:
                         //存储多项式项的结点定义
                         struct term{

                           float exponent;                      //项的指数
                           float coefficient;                    //项的系数
                           term *next;                         //下一结点

                         };
                         typedef term *polynomial;             //定义多项式类型名称
                         基于上面的结构类型定义,我们可以定义一个向多项式添加项的函数,其代码如下:
                         //该函数向多项式中增加项(添加到最后)

                         void add_term(polynomial p,float exponent,float coefficient)
                         {
                           term *q,*t;





                                                                                                                    49 49







          21X2204.indd   49                                                                                        2019/9/26   13:53:09
   52   53   54   55   56   57   58   59   60   61   62