数据结构之顺序表

1.什么是顺序表

​ 线性表(逻辑结构)的顺序存储(存储结构)就是顺序表,也就是我们常常见到的数组 ,其存储单元是一组连续的地址,逻辑上相邻的两个元素在物理位置上也相邻。

2.顺序表的特点

  • 随机访问,通过首地址和元素序号可以在O(1)的时间内找到元素
  • 存储密度高,每个结点只存储数据元素(然而像链表的结点还要存储next指针)
  • 逻辑上相邻的两个元素在物理位置上也相邻,导致插入和删除要移动大量元素。

3.代码示例–增删查

#include <iostream>
using namespace std;
#define InitSize 10
typedef struct ArrayList{
    int *data; //指向当前数组的指针,也就是数组的首地址
    int maxSize; //规定数组最大的容量
    int lenth; //数组当前包含元素个数
}Arr;

/**
 * 插入操作
 * @param arr
 * @param position
 * @param content
 * @return
 */
bool insertArr(Arr &arr, int position,int content){
    if(position<1||position>arr.lenth+1)
        return false;
    if(arr.lenth==arr.maxSize)return false;
    for(int j=arr.lenth;j>=position;j--){
        arr.data[j]=arr.data[j-1];
    }
    arr.data[position-1]=content;
    arr.lenth++;
    return true;
}

/**
 * 删除操作
 * @param arr
 * @param position
 * @param e
 * @return
 */
bool deleteArr(Arr &arr, int position,int &e){
    if(position>arr.lenth||position<1){
        return false;
    }

    e=arr.data[position-1];
    for(int j=position-1;j<arr.lenth-1;j++)
        arr.data[j]=arr.data[j+1];
    arr.lenth--;

}

int getOne(Arr &arr,int el){
    for(int i=0;i<arr.lenth;i++){
        if(arr.data[i]==el)return i+1;
    }
    return -1;
}
int main() {
    Arr arr;
    //创建一个数组空间
    arr.data=new int[InitSize];

    //初始化数组
    for(int i=0;i<10;i++)
        arr.data[i]=i+1;
    arr.lenth=10;

    //插入操作
    insertArr(arr,3,17);
    cout<<"插入后数组:";
    for(int i=0;i<arr.lenth;i++)
       cout<<arr.data[i]<<" ";
    cout<<endl;

    //删除操作
    int e;
    deleteArr(arr,2,e);
    cout<<"删除元素:"<<e<<" "<<"数组变为:";
    for(int i=0;i<arr.lenth;i++)
        cout<<arr.data[i]<<" ";
    cout<<endl;
    cout<<getOne(arr,3);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值