故事前研(言)
小森去看电影<<流浪地球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;
}