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);
}