数据结构_顺序表

顺序表

顺序表:用顺序存储的方式实现线性表顺序存储

一.顺序表的实现

静态分配
typedef struct 

{

  ElemType data[MaxSize];  //用静态“数组”存放数据元素

  int length; //顺序表当前长度

}SqlList; //顺序表的定义类型(静态分配方式)
静态分配初始化:
 void InitList(SqlList &L){
  for (int i = 0; i < MaxSize; i++)
  {
​    L.data[i]=0; //所有元素设置为默认初始值

​    L.length=0;//初始长度设为0;
  }
}
动态分配
typedef struct 

{

  ElemType *data; //动态分配数组指针

  int Maxsize; //顺序表最大容量

  int length; //顺序表得当前长度

}SeqList;//顺序表的定义类型(动态分配方式)

动态申请空间:malloc

释放空间: free free(q)

动态分配初始化
void InitList(SeqList &L){

  L.data=(ElemType *)malloc(sizeof(ElemType)*MaxSize);

  L.length=0;

  L.Maxsize=MaxSize;

}
二.顺序表的特点
  1. 随机访问
  2. 存储密度高
  3. 拓展容量不方便 4.插入删除操作不方便,需要移动大量元素
三.顺序表插入(基于静态分配)
bool ListInsert(SqlList &L,int i,int e){
  if (i<1||i>L.length+1) return false; //判断i是否有效
  if (L.length>=MaxSize) return false; //判断存储空间是否已满
  for (int j= L.length;j>=i; j--)
  {
​    L.data[j] = L.data[j-1]; //将第i个元素之后的元素后移动
​    L.data[i-1]=e;
  }
​    L.length++;
  return true;  
}

时间复杂度:最好情况:O(1); 最坏情况:O(n); 平均情况:O(n)

四.顺序表删除第i个位置:位序i与数组下标i的区别
bool ListDelete(SqlList &L,int i,int &e){
  if (i<1||i>L.length+1) return false; //判断i是否有效
   e=L.data[i-1];  //被删除的元素给e
  for (int j= i;j<L.length; j++)
  {
​    L.data[j-1] = L.data[j]; //将第i个元素之后的元素前移动 
  }
​    L.length--;  //线性表长度减1
  return true;  
}

时间复杂度:最好情况:O(1); 最坏情况:O(n); 平均情况:O(n)

五.顺序表按位查找:时间复杂度O(1)
ElemType GetElem(SqlList L,int i){

  return L.data[i-1];

}

// 顺序表按值查找:时间复杂度最好情况:O(1); 最坏情况:O(n); 平均情况:O(n)

int LocateElem(SeqList L ,ElemType e){

  for (int i = 0; i < L.length; i++)

  {

​    if (L.data[i]==e) return i+1; 

  }

  return 0;  //查找失败

}
六.结构体比较:需要依次对比各个分量来判断是否相等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值