数据结构及算法_顺序表

顺序表的原理算法

顺序表是一种简单的线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以快速定位第几个元素,中间不允许有空值,插入、删除时需要移动大量元素。
顺序表的三个要素:

  • 用elems记录存储位置的基地址
  • 分配一段连续的存储空间
  • 用length记录实际的元素个数,即顺序表的长度
    顺序表
    结构体定义
    #define MAX_SIZE 100
    struct _SqList{
    ElemType *elems; //顺序表的基地址
    int length; //顺序表的长度
    int size; //顺序表总的空间大小
    }
结构体定义
#define MAX_SIZE  100
struct  _SqList{
    ElemType *elems;    //顺序表的基地址
    int length;         //顺序表的长度
    int size;           //顺序表总的空间大小
}

顺序表的算法实现

#define MAX_SIZE  100
typedef struct{
    int *elems;     //顺序表的基地址
    int  length;    //顺序表的长度
    int  size;      //顺序表的空间
}SqList;

1 顺序表的初始化

bool initList(SqList &L){         //构造一个空的顺序表L
    L.elems = new int[MAX_SIZE];  //为顺序表分配MAX_SIZE个空间
    if(!L.elems) return false;    //存储分配失败
    L.length = 0;                 //空表长度为0
    L.size = MAX_SIZE;
    return true;
}

2 顺序表增加元素

bool listAppend(SqList &L, int e){
    if(L.length == MAX_SIZE) return false;   //存储空间已满
    L.elems[length] = e;
    length++;                                //表长增1
    return true;
}

3 顺序表插入元素

bool listInsert(SqList &L,int i, int e){
      if(i < 0 || i >= L.length) return false;    //i值不合法
      if(L.length == MAX_SIZE) return false;      //存储空间已满
      
       for(int j = L.length - 1; j >= i;j--){
           L.elems[j+1] = L.elems[j];             //从最后一个元素开始后移,直到第i个元素后移              
       }
       L.elems[i] = e;                            //将新元素e放入第i个位置
       L.length++;                                //表长增1
       return true;
}

4 顺序表删除元素

bool listDelete(SqList &L, int i){
    if(i < 0 || i >= L.length) return false;    //不合法
}
    if(i== L.length - 1){                      //删除最后一个元素,直接删除
        L.length--; 
        return true;
    }
    for(int j = i; j < L.length ; j++){
        L.elems[j] = L.elems[j+1];             //被删除元素之后的元素前移
    }
    L.length--;
    return true;

5 顺序表销毁

void destroyList(SqList &L){
     if(L.elems) delete []L.elems;   //释放存储空间
     L.length = 0;
     L.size = 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值