[小森数据结构]看电影-顺序表技术精讲

故事前研(言)

小森去看电影<<流浪地球2>>的时候买电影票的场景.
在这里插入图片描述
突然一个叫高启强的人买电影票 拉了两个Hei友,来看电影 <<流浪地球2>>

在这里插入图片描述当场就害怕极了,我也知道他想干什么,于是乎就让他到我这里,“高启强”:你小子,有钱途啊哈,我:小事情,哈哈哈(心里想:我太衰了!)那两个嘿友不来看电影啊 !看到高启强来这里就,大家都害怕!于是乎都让位,从影友6,开始往后移动,影友6变影友7,影友5变影友6,我还是我一直不变,但变的是序号

在这里插入图片描述

顺序表技术精讲

可以看到以上的这种情景,一定会有人有点慌…
不要慌他不就是来看电影的吗?
这基于这样的情景,我一个菜只因(鸡)程序员来说,一定没问题的在这里插入图片描述

广告:时间 爽yy(歪歪)口服液,独家赞助 小森数据结构-情景篇 关注小森, 金日头条账号 小森程序员,和小破站 :小森程序员,抖因视频,喜瓜视频 感谢爽yy口服液!

为啥需要顺序表?

这个顺序表,让我想到了一首歌词 "手牵手,一步两步三步四步往前走"后面的对应着下一个技术点:"链表"敬请期待吧

一步两步三步四步 是不是连续 竟然是连续的,那不是非常好访问 每一个只因(在这里插入图片描述

脚印在春泥里 并且从七里香拉出臭臭的香香,所以计算机是怎么表示 这样的场景,并且使用数据结构里的算法
首先有人提出来一个问题 :“如果没有数据结构会怎样?”
那有可能 不会有我们各种 应用程序,和操作系统,以及不会产生军工企业… 因为所有的应用都会关键在数据是如何存储以及如何获取 比如说一个音乐播放器 的播放列表 是不是一个挨着一个?
敢问数据是不是,mp3的文件 或者并且音乐播放器自带文件 从网络获取数据 并且放入播放列表里 进行播放

“一步两步三步四步”
“望着天看星星”

所以为啥学习数据结构.就是知道计算机如何表示事物,并且实现不同的功能 算法就是实现功能 ,添加,删除,查找,替换,排序,等等
这些功能是必备的,而且也是需要改良,变成最优算法!

当我们去超市购物时,我们可以拿一个购物篮来存放我们要购买的商品,
这个购物篮就可以看做是顺序表。
在创建顺序表时,我们需要知道这个购物篮最多能装多少件商品
,然后再找到一些连续的空间来存放商品。
每放一件商品,我们就把购物篮中的商品数量加一,
这个数量就是当前顺序表中实际存储的元素数量。
顺序表中存储的元素可以是任何类型的商品,如食品、日用品、化妆品等。
由于顺序表的存储空间是连续的,因此在访问篮子中的任何商品时都非常方便快捷。

顺序表核心算法实现

欢迎你来到顺序表核心算法实现
这数据结构想必大家已经了解清楚了 那么你想不想亲自实现一波 无论你是IT还是非IT的都可以看懂并且 亲自 实现自己的顺序表

我们拉丝GO

首先 我们需要的是算法的思路, 并且自己独立实现(用画图,或者代码实现一波)

顺序表是一种线性数据结构,它可以用数组实现。顺序表的结构包括:

数据元素:顺序表中存储的元素,可以是任何数据类型,如整数、浮点数、字符等。

最大长度:顺序表的最大长度是指顺序表中最多可以存储多少个元素。在创建顺序表时需要确定最大长度,以便在申请内存空间时分配足够的空间。

当前长度:顺序表的当前长度是指当前顺序表中实际存储的元素数量。当顺序表中添加或删除元素时,当前长度也会相应地改变。

存储空间:顺序表的存储空间是指用来存储顺序表元素的连续内存空间。存储空间的大小取决于顺序表的最大长度和元素类型的大小。

//最大分配空间
 const int maxsize=2048;
 
//定义顺序表结构体
struct SeqList{
    int *data; //存储数据的数组指针
    int capacity; //顺序表的最大长度
    int Size; //顺序表的当前长度
};

创建顺序表

SeqList createSeqList(int capacity=2048){
    SeqList seqList;
    seqList.capacity = capacity;
    seqList.data = new int[seqList.capacity];
    seqList.Size = 0;
    return seqList;
}

顺序表检测函数

bool check(SeqList &seqList){
    if(seqList.Size == 0){
        cout<<"顺序表为空";
        return false;
    }
    if(seqList.Size == seqList.capacity){
        cout<<"顺序表已满";
        return false;
    }
    return true;
}

顺序表尾部添加

//顺序表尾部添加
void add(SeqList &seqList, int value){
    if(!check(seqList)){
        cout<<"顺序表已满,无法添加"<<endl;
        return;
    }
    seqList.data[seqList.Size] = value;
    seqList.Size++;
}

顺序表遍历算法

//顺序表遍历算法
void traverse(SeqList &seqList){
    for(int i=0; i<seqList.Size; i++){
        cout<<seqList.data[i]<<" ";
    }
    cout<<endl;
}

检测位置

//检测位置
bool checkPos(SeqList &seqList, int index){
     if(index < 0 || index > seqList.Size){
        cout<<"插入位置不合法"<<endl;
        return;
    }
}

将index位置及其后面的元素后移一位

//将index位置及其后面的元素后移一位
void MoveBack(int index, SeqList &seqList){
    for(int i=seqList.Size-1; i>=index; i--){
        seqList.data[i+1] = seqList.data[i];
    }
}

顺序表插入算法

void insert(SeqList &seqList, int index, int value){
    if(checkPos(seqList, index))){
        cout<<"插入位置不合法"<<endl;
        return;
    }

    if(!check(seqList)){
        cout<<"顺序表已满,无法添加"<<endl;
        return;
     }
  MoveBack(index,seqList);
    seqList.data[index] = value;
    seqList.Size++;
    
}

将index位置及其后面的元素前移一位

void MoveFroot(int index, SeqList &seqList){
    for(int i=index; i<seqList.Size-1; i++){
        seqList.data[i] = seqList.data[i+1];
    }
}

顺序表删除

void remove(SeqList &seqList, int index){
    if(checkPos(seqList, index)){
        cout<<"删除位置不合法"<<endl;
        return;
    }
   MoveFroot( index, seqList);
    seqList.Size--;
}

顺序表查询

int search(SeqList &seqList, int value){
    int i = 0;
    while(i < seqList.Size){
        if(seqList.data[i] == value){
            return i;
        }
        i++;
    }
    return -1;
}

逆序遍历

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小森程序员

若能帮助到你,小费自愿付费

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值