C++数据结构,1_线性表的顺序表现和实现

目录

一、线性表的顺序表现

1、为什么称为顺序表

2、顺序描述

二、顺序表基本操作的实现

1、初始化

2、取值

3、根据位置删除

4、查找

........


一、线性表的顺序表现

1、为什么称为顺序表

线性表的顺序表现指用一组地址连续的存储单元依次存储线性表的数据元素

(同时这是线性表的顺序存储结构顺序映像)。

通常称这种存储结构的线性表为顺序表。

 

 注意!线性表的顺序存储结构是一种随机存取的存储结构

(表中的任一数据元素都可以随机存取)

2、顺序描述

在c++中可以用动态分配的一维数组表示线性表。

//--------顺序表的存储结构-------

 typedef struct SqList{

        Elemtype * elem;               //存放的地址

        int size;                            //存放的元素长度

        int capacity;                 //容量,顺序表可能达到的长度。

}

 Elemtype(模板),数据类型是为了描述统一自定的,在实际使用中可以根据需要具体定义数据类型,如int、float、char等,以及struct结构体类型。

 

二、顺序表基本操作的实现

1、初始化

SqList * InitList(){
L
SqList * L.elem = new ElemType[L.capacity];
if(!=L.elem) exit(-1);
L.size = 0;
L.capacity = 100;
return L;
}

//动态分配线性表的存储区域可以更有效的利用系统的资源,当不需要该线性表时,可以销毁操作及时释放占用的存储空间。

2、取值

SqList * GetElem(SqList* L, ElemType value){

if(L==NULL){
    return ;
}

//判断空间是否足够
if( L.size == L.capacity ){

    //第一步,申请一块更大的空间,新空间是旧空间的两倍
    L.capacity = 2*L.capacity;
    ElemType * newSpace = new ElemType[L.capacity];
    //第二步,拷贝数据到新的空间
    memcpy(newSpace,L.elem,L.capacity*sizeof(ElemType))    /*从旧空间L.elem拷贝L.capacity*sizeof(ElemType) 个数据给新内存空间newSpace*/
    free(L.elem);
    
    //更新容量
    L.elem = newSpace;
     }
        
    //插入新元素
    L.elem[L.size] = value;
    L.size++;

}

3、根据位置删除

void ListDelete(SqList * L,int pos){
    if(L==NULL){return ;}                 //判断是否为空
    if(pos<0||pos>L.size){return 0;}      //判断是否合法
    //使用for循环覆盖
    for(int i=pos;i<L.size;i++){
        L.elem[i-1]=L.elem[i];
        --L.size;
    }
}

除了根据位置删除外,还有根据值去删除,大体上是类似的,可以自己动手写一下。

4、查找

int LocateElem(SqList * L,ElemType value){
     if(L==NULL){return ;}                 //判断是否为空
        //查找到值的位置
        int pos = -1;
     for(int i=0;i<L.size;i++){
        if(L.elem[i]==value){
            pos=i;
            break;
            }
         else return -1; //查找失败
        }
       return pos;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值