数据结构之----线性表

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

线性表的顺序存储结构: 线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
1,顺序表的结构:
        #define  MAXSIZE  20
        typedef  int  ElemType;
        typedef   struct
        {
               ElemType  data[MAXSIZE];     //数组
               int   length;       //顺序表长度
        }Sqlist;

        顺序表的第  i  个元素的下标为  i+1 

2,顺序表的插入与删除
     //插入数据
     void  Insertion(QList& list, int pos, int data)
     {
         //pos不是下标,从1开始
         if ((pos > list.length) || (pos >= MAX_SIZE))
         {
    
                return;
         }
         int posidx = pos - 1; //位置所对应的下标
         int maxidx = list.length - 1;
         for (int i = maxidx; i >= posidx; i--)
         {
               list.data[i + 1] = list.data[i];
               if (i == posidx)
               {
                    list.data[i] = data;
                }
          }
          list.length++;
    }
    //删除数据
    void  RemovePos(QList& list, int pos)
    {
          //pos不是下标,从1开始
          if ((pos > list.length) || (pos >= MAX_SIZE))
          {
                return;
          }
          int idxpos = pos - 1;
          int idxlen = list.length - 1;
          for (int i = idxpos; i < idxlen; i++)
          {
                list.data[i] = list.data[i + 1];
          }
          list.data[idxlen] = 0;
          list.length--;
     }
3,顺序表的优点和缺点
      时间复杂度为O(1)
      它比较适合元素个数不太变化,而更多是存取数据的应用。

      优点:无需为表示表中元素之间的逻辑关系而增加额外的存储空间
                可以快速地存取表中任一位置的元素
      缺点:插入和删除操作需要移动大量元素
                长度变化大难以确定存储空间的容量

二,链表

链表大概有三种:
                 单链表,循环链表,双向链表。

单链表节点:
             struct  LinkNode
             {
                    void*  data;
                    struct   LinkNode*  next;
             };
双向链表节点:
             struct  DulinkNode
             {
                    void*  data;
                    struct  DulinkNode* per;
                    struct  DulinkNode* next;
             }

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线性表是一种常见的数据结构,它表示具有相同数据类型的一组元素的有序序列。线性表中的元素之间存在一种顺序关系,每个元素都有一个前驱和一个后继(除了第一个元素没有前驱,最后一个元素没有后继)。线性表可以用顺序存储结构或链式存储结构实现。 在顺序存储结构中,线性表的元素按照顺序存储在连续的内存空间中,可以通过元素的下标来访问和操作元素。插入或删除元素时,需要移动其他元素,因此操作的时间复杂度较高。 链式存储结构中,线性表的每个元素都包含一个数据域和一个指针域,指针指向下一个元素。通过指针的链接,元素可以按照任意顺序存储在内存中,插入和删除操作只需要改变指针的指向,因此时间复杂度较低。 线性表常见的操作包括插入、删除、查找、获取长度等。其中插入和删除操作需要注意保持线性表的顺序关系。 常见的线性表有数组、链表、栈和队列。数组是最简单的线性表,通过下标可以直接访问元素;链表是动态存储结构,插入和删除操作方便,但访问元素需要遍历链表;栈是一种特殊的线性表,只允许在表的一端进行插入和删除操作;队列也是一种特殊的线性表,只允许在表的一端进行插入操作,在另一端进行删除操作。这些数据结构在实际应用中都有各自的应用场景和优缺点。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值