顺序表

作者: _涼城 | 来源:发表于2020-03-31 21:44 被阅读0次

线性表 (线性结构)

  • 特点
    1. 存在唯⼀的首数据元素
    2. 存在唯一的尾数据元素
    3. 除首数据元素外,每个数据元素均有一个前驱
    4. 除尾数据元素外,每个数据元素均有一个后驱
  • 常用运算

    一般有以下几种常用运算:

    1. 检索。检索就是在数据结构里查找满足一定条件的节点。
    2. 插入。往数据结构中增加新的节点。
    3. 删除。把指定的结点从数据结构中去掉。
    4. 更新。改变指定节点的一个或多个字段的值。
  • 顺序存储

​ 线性表的顺序存储是一组地址连续的存储单元依次存储线性表的数据元素,特点是, 逻辑上相邻的数据元素,其物理次序也是相邻的,只要确定了起始位置,表中任一元素的地址都可以根据索引乘单个元素存储单元的长度获取。

  1. 顺序表的结构定义

    #define maxlen 100 //定义顺序表中元素个数最多有几个
    #define true 1
    #define false 0
    
    typedef int ElementType;
    typedef int bool;
    
    typedef struct
    {
    ElementType *data; //ElementType是元素的类型 依具体情况而定
    int listLength; //便于时刻了解顺序表里元素的个数
    }ContiguousList; //顺序表的名称
    
    1. 构造一个空的顺序线性表

      bool InitList(ContiguousList *L){
         L->data =  malloc(sizeof(ElementType) *maxlen);   //开辟空间
         if (!L->data) //若开辟失败
         { 
             return false;
         }
         L->length = 0; //初始化长度
         return true;
      }
      
    2. 销毁顺序线性表L

      bool destroyList(ContiguousList *L){
       free(L->data);//销毁数据空间
       L->data = NULL;//指向NULL
       L->length = 0;//重置长度
       free(L);//释放L
       return true;
      }
      
    3. 将L重置为空表

      bool ClearList(ContiguousList *L){
       L->length = 0;//操作结果:将L重置为空表
       return true;
      }
      
    4. 判断是否为空表

      bool ListEmpty(ContiguousList L)
      {
          if(L.length==0)
              return true;
          else
              return false;
      }
      
    5. 返回L中数据元素个数

      int ListLength(ContiguousList L)
      {
          return L.length;
      }
      
    6. 在第i个位置插入 e

      //插入  非空,避免越界
      bool ListInsert(ContiguousList *L,int i, ElementType e){
       if (i < 1 || i>L->length + 1) return false;
       if (L->length == maxlen) return false;
       if (i <= L->length)
       {
           for (int j = L->length - 1; j>= i-1; j--)
           {
               L->data[j+1] = L->data[j];
           }
       }
       L->data[i-1] = e;
       ++L->length;
      
       return true;
      }
      
    7. 用e返回L中第i个元素的值

      bool GetElem(ContiguousList L,int i, ElementType *e){
          //判断i值是否合理
          if(i<1 || i > L.length) return  false;
          //data[i-1]单元存储第i个数据元素.
          *e = L.data[i-1];
          
          return true;
      }
      
    8. 删除第i个元素

      bool ListDelete(ContiguousList *L,int i){
       if (L->length == 0) return false;
       if (i < 1 || i>L->length + 1) return false;
       for (int j = i; j < L->length; j++)
       {
           L->data[j-1] = L->data[j];
       }
       L->length--;
       return true;
      }
      
    9. 获取cur_e的前驱 pre_e

      bool PriorElem(ContiguousList L,ElemType cur_e,ElemType* pre_e)
      {
          int i = 2;
          ElemType *p = L.data + 1;
          while(i<=L.length && *p!=cur_e)
          {
                  p++;
                  i++;
          }
          if(i>L.length) return false;
          else
          {
                  *pre_e = *--p;
                  return true;
          }
      }
      

相关文章

  • 数据结构与算法(二,线性表的顺序存储结构,穷举法(冒泡和选择排序

    线性表 顺序表 顺序表的特性 顺序表的元素有前驱和后继 顺序表有size 顺序表的增删改查 顺序表的优缺点优点:尾...

  • 顺序表-动态顺序表

    顺序表是逻辑上相邻的元素物理也相邻的。 静态内存是指在程序开始运行时由编译器分配的内存,它的分配是在程序开始编译时...

  • 顺序表-静态顺序表

    线性表,全名为线性存储结构。将具有“一对一”关系的数据“线性”地存储到物理空间中,这种存储结构就称为线性存储结构(...

  • 线性表之顺序存储-顺序表

    顺序表的操作 [x] 向有序顺序表插入一个元素 [x] 顺序表的冒泡排序 [x] 顺序表的删除操作 [x] 顺序表...

  • 数据结构之线性表

    1、线性表-顺序表线性表-顺序表

  • 线性表-顺序表与单链表

    顺序表 线性表的顺序存储,是逻辑相邻,物理存储地址也相邻。 结构定义 顺序表的初始化 顺序表的插入 顺序表的取值 ...

  • 顺序表和链表的区别

    参考:线性表和链表的区别 注:参考文中的‘线性表’准确的说应该是’顺序表‘,链表与顺序表都是线性表。 顺序表:顺序...

  • 快速理解数据结构中链表

    组织数据作用的线性表分为顺序表和链表 顺序表:平常所使用的各类数组均为顺序表,即存储逻辑顺序和物理顺序相同。较常见...

  • 顺序表

    在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传...

  • 顺序表

    https://blog.csdn.net/qq_41943578/article/details/82934644

网友评论

      本文标题:顺序表

      本文链接:https://www.haomeiwen.com/subject/yttnuhtx.html