线性表

    线性结构包含:线性表、堆栈、队列、字符串、数组等,下面着重讲线性表


    定义:线性表是一种线性结构,是具有相同特性的n(n>=0)个数据元素组成的有穷序列


    特点:1.一对一的关系,只有一个首节点和尾节点

               2.除了首尾节点外,其他节点只有一个直接前驱和一个直接后继

                 

           基本操作 :初始化,求表长,读元素,定位,插入,删除

ADT List {
  数据对象:D={ ai | ai ElemSet, i=1,2,…n, n0 }
  数据关系: R={ <ai-1,ai> | ai-1,ai D, i=2,3,…n}
  基本运算:
    InitList(&L); //初始化线性表,构造空线性表
    DestroyList(&L); //销毁线性表
    Length(L); //求线性表长度
    GetElem(L,i,&e); //获得线性表中第i个元素
    LocateElem(L,e,compare()); //查找线性表中和e满足关系”compare”的元素
    InsertElem(&L,i,e); //在线性表的位置i插入一个元素e
    DeleteElem(&L,i,&e);  //删除线性表位置i的元素,被删除元素的值放到e中
} ADT List 

           线性表的存储结构分为顺序存储链式存储


顺序表:将表中的节点依次存放在计算机内存中一组连续的存储结构

            

              插入操作:例如将e插入到a4和a5之间的操作

                  (1)元素a7向后移动一个位置

                  (2)元素a6向后移动一个位置

                  (3)元素a5向后移动一个位置

                  (4)将元素e插入到空位置上

                 

               删除操作:例如将a5从表中删除

                  (1)判断参数是否合理

                  (2)在存储空间上找到删除的为位置

                  (3)删除a5,将后面的元素位置依次向前移动

                  (4)把表的长度减1

                   

           效率分析:以删除运算为例

          算法执行时间主要消耗在删除后元素的移动上,而移动元素的个数与删除位置i有关 
                     最好情况: 在表尾删除,不移动元素,T(n)=O(1)
                     最坏情况: 在表头删除,移动n-1个元素,T(n)=O(n)
                     平均复杂度:T(n)=O(n)
  算法空间复杂度不需要额外空间:S(n) = O(1)   

         顺序表的优缺点

                优点:
                不需要额外的存储空间来表示元素间的逻辑关系
                可以随机地存取表中的任意一个元素
                缺点:
                插入和删除元素时要移动大量的元素
                必须事先进行空间分配,表的容量不易扩充

链式表:包括单链表,循环链表和双向循环链表。指用任意的存储单元存放线性表中的元素,每个元素与其直接前驱和(或)直接后继之间的关系用指针来存储。

                                

 单链表:链表中,如果每个结点中只包含一个指针域,则称之为线性链表或单链表。

                     

                插入操作:第i个位置上插入新的结点

                       (1)找到第i-1个元素所在节点

                       (2)申请一个结点s并填入e值

                       (3)修改s的指针域指向p的下一个节点

                       (4)修改p的指针域指向s

                                 

                   

                   删除操作:第i个位置上删除结点

                       (1)找到第i-1个元素所在节点

                       (2)增设临时指针q指向p的下一结点(待删除的结点)

                       (3)修改结点p的指针域,指向第i+1个结点

                       (4)删除结点q,释放内存空间。

                     

              链表的优缺点
                   优点:
                      插入、删除时无须移动元素,只需修改指针
                      根据需要申请存储空间,且不要求连续的存储空间
                   缺点:
                      对表中的元素只能进行顺序访问
                      用指针指示元素之间的逻辑关系(直接前驱、后继),存储空间利用率低

         循环链表和双链表:

                

              

  总结:

                            

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 32
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值