在哪家网站上可以找到加工活做,公司网站建设软件下载,南京网站开发南京乐识不错,智能营销方法数据结构【线性表篇】(一#xff09; 文章目录 数据结构【线性表篇】(一#xff09;前言为什么突然想学算法了#xff1f;为什么选择码蹄集作为刷题软件#xff1f; 目录一、顺序表(一)、顺序表的定义(二)、顺序表的插入删除(三)、顺序表的查找 二、完整代码(一)、顺序表的…数据结构【线性表篇】(一 文章目录 数据结构【线性表篇】(一前言为什么突然想学算法了为什么选择码蹄集作为刷题软件 目录一、顺序表(一)、顺序表的定义(二)、顺序表的插入删除(三)、顺序表的查找 二、完整代码(一)、顺序表的增删改查-完整代码(静态存储)(二)、顺序表的增删改查-完整代码(动态存储) 三、结语 前言 为什么突然想学算法了 用较为“官方”的语言讲是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中要想完成任何实质性的工作理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。 但从实际而言是因为当下竞争压力逐渐增大无论走哪一条路都不免需要一些相对丰富的算法知识是故便产生了一个寒假巩固速成算法的计划可能对于像我这种算法竞赛小白而言几乎很难但我仍然还是想尝试一下毕竟梦想还是要有的万一实现了呢(▽)~ 为什么选择码蹄集作为刷题软件 码蹄集是在全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC) 指导下建设的其依托全国各大名校计算机系和清华大学出版社等单位的强大资源旨在为计算机学习爱好者提供全面和权威的计算机习题。 . 目录
一、顺序表
(一)、顺序表的定义
参考代码
//顺序表的定义
typedef struct{int num; //号数int people; //人数
}Customer;//顺序表的实现——静态分配
#define Maxsize 10 //定义最大长度
typedef struct{int data[Maxsize]; //用静态的“数组”存放数据元素int length; //顺序表的当前长度
}SqList; //顺序表的类型定义(静态分配方式) sequence:顺序序列//顺序表的实现——动态分配
#define InitSize 10 //定义最大长度
typedef struct{int *data; //指示动态分配数组的指针int MaxSize; //顺序表的最大容量int length; //顺序表的当前长度
}SeqList; //顺序表的类型定义(动态分配方式)//key: 动态申请和释放内存空间
//C -- malloc、free函数
// L.data (ElemType*)malloc(sizeof(ElemType)*InitSize)
// ElemType*: malloc函数返回一个指针需要强制转型为你定义的数据元素类型指针
// InitSize: malloc函数的参数指明要分配多大的连续内存空间
//C -- new、delete关键字//基本操作——初始化一个程序表(静态分配)
void InitList(SqList L){for(int i0;iL.length;i)L.data[i]0; //将所有数据元素设置为默认初始值L.length0; //顺序表初始长度为0
}//基本操作——初始化一个程序表(动态分配)
void InitList(SeqList L){//用malloc函数申请一片连续的存储空间L.data (int*) malloc(InitSize*sizeof(int));for(int i0;iL.length;i)L.data[i]0; //将所有数据元素设置为默认初始值L.length0;L.MaxSizeInitSize;
}//增加动态数组的长度
void IncreaseSize(SeqList L,int len){int *pL.data;L.data(int*) malloc((L.MaxSizelen)*sizeof(int));for(int i0;iL.length;i){L.data[i]p[i]; //将数据复制到新区域}L.MaxSizeL.MaxSizelen; //顺序表最大长度增加lenfree(p); //释放原来的内存空间
}//输出顺序表
void printList(SqList L){printf(当前顺序表的值依次为\n);for(int i0;iL.length;i){printf(%d\n,L.data[i]);}printf(\n);
}int main(){SqList sqList; //声明一个顺序表(静态)InitList(sqList); //初始化顺序表(静态)
//----------------------------------------------------SeqList seqList; //声明一个顺序表(动态)InitList(seqList); //初始化顺序表(动态)return 0;
}(二)、顺序表的插入删除
//顺序表的基本操作(以下方法均为静态动态方法与之类似)
//插入(在表L中的第i个位置上插入指定元素e)
bool ListInsert(SqList L,int i,int e){if(i1 || iL.length1) //判断i的范围是否有效return false;if(L.lengthMaxsize) //当前存储空间已满不能插入return false;for(int jL.length;ji;j--) //将第i个元素及之后的元素后移L.data[j]L.data[j-1];L.data[i-1]e; //在位置i处放入eL.length;return true;
} //平均时间复杂度O(n)//删除(删除表L中第i个位置的元素并用e返回删除元素的值)
bool ListDelete(SqList L,int i,int e){if(i1 || iL.length) //判断i的范围是否有效return false;eL.data[i-1]; //将被删除的元素赋值给efor(int ji;jL.length;j) //将第i个位置后的元素前移L.data[j-1]L.data[j];L.length--; //线性表长度减1return true;
}//平均时间复杂度O(n)int main(){SqList sqList; //声明一个顺序表(静态)InitList(sqList); //初始化顺序表(静态)//插入操作——在位置i处插入元素eListInsert(sqList,1,3);ListInsert(sqList,2,4);ListInsert(sqList,2,1);printList(sqList);//删除操作int e-1; //用变量e把删除的元素“带回来”if(ListDelete(sqList,1,e))printf(已删除第1个元素删除元素值为%d\n,e);elseprintf(位序i不合法删除失效\n);printList(sqList);//查找操作int aLocateElem(sqList,4); //按值查找int bGetElem(sqList,2); //按位查找
printf(%d %d,a,b);//----------------------------------------------------SeqList seqList; //声明一个顺序表(动态)InitList(seqList); //初始化顺序表(动态)// 在顺序表中随便插入几个元素IncreaseSize(seqList,5);return 0;
}(三)、顺序表的查找
//查找(静态)
//按位查找
int GetElem(SqList L,int i){ //获取表L中的第i个位置的元素的值return L.data[i-1];
} //时间复杂度O(1)//按值查找
//在顺序表L中查找第一个元素值等于e的元素并返回其位序
int LocateElem(SqList L,int e){for(int i0;iL.length;i)if(L.data[i]e)return i1; //数组下标为i的元素值等于e返回其为序i1return 0; //退出循环说明查找失败
} //时间复杂度O(n)//查找(动态)
//按位查找
int GetElem(SeqList L,int i){ //获取表L中的第i个位置的元素的值return L.data[i-1];
}//按值查找
//在顺序表L中查找第一个元素值等于e的元素并返回其位序
int LocateElem(SeqList L,int e){for(int i0;iL.length;i)if(L.data[i]e)return i1; //数组下标为i的元素值等于e返回其为序i1return 0; //退出循环说明查找失败
}二、完整代码
(一)、顺序表的增删改查-完整代码(静态存储)
#includeiostream
using namespace std;//定义顺序表的静态存储结构
#define Maxsize 10
typedef struct{int data[Maxsize];int length;
}SqList;//初始化顺序表
void InitSqList(SqList L){for(int i0;iMaxsize;i){L.data[i]0;}L.length0;
}//在顺序表位置i处插入元素e
bool InsertSqList(SqList L,int i,int e){if(i1 || iL.length1) return false;if(L.length Maxsize) return false;for(int jL.length;ji;j--){L.data[j]L.data[j-1];}L.data[i-1]e;L.length;return true;
}//在顺序表位置i处删除元素e
bool DeleteSqList(SqList L, int i, int e){if(i1 || iL.length1) return false;e L.data[i-1];for(int ji;jL.length;j){L.data[j-1]L.data[j];}L.length--;return true;
}//修改顺序表位置i处元素
bool ChangeSqList(SqList L, int i,int e){if(i1 || iL.length1) return false;L.data[i-1]e;return true;
}//查找顺序表位置i处元素
bool FindLoacteSqList(SqList L,int i,int e){if(i1 || iL.length1) return false;e L.data[i-1];return true;
}//查找元素e在顺序表中的位置
bool FindElemSqList(SqList L,int i, int e){for(int j0;jL.length;j){if(L.data[j]e){ij1;return true;}}return false;
}//输出顺序表
void PrintfSqList(SqList L){for(int i0;iL.length;i)coutL.data[i] ;
}int main(){SqList L;InitSqList(L);for(int i1;i10;i){InsertSqList(L,i,i);}PrintfSqList(L);coutendl;//删除i处元素ecout删除i处元素eendl;int e;coutDeleteSqList(L,3,e)endl;couteendl;PrintfSqList(L);coutendlendl;//修改位置i处元素ecout修改位置i处元素eendl;coutChangeSqList(L,4,10)endl;PrintfSqList(L);coutendlendl;//查找//查找位置i处元素ecout查找位置i处元素eendl;coutFindLoacteSqList(L,4,e)endl;couteendlendl;//查找元素e的位置int i;cout查找元素e的位置endl;coutFindElemSqList(L,i,10)endl;coutiendl;return 0;
}(二)、顺序表的增删改查-完整代码(动态存储)
#includeiostream
using namespace std;
#define Maxsize 10//顺序表的动态存储
typedef struct{int *data; //指向动态开辟的数组int length; //有效数据个数int Size; //容量空间的大小
}SqList;//初始化顺序表
//基本操作——初始化一个程序表(动态分配)
void InitSqList(SqList L){//用malloc函数申请一片连续的存储空间L.data (int*)malloc(Maxsize * sizeof(int));L.length0;L.SizeMaxsize;
}//增加动态数组的长度
void IncreaseSize(SqList L,int len){int *pL.data;L.datanew int(Maxsizelen);for(int i0;iL.length;i){L.data[i]p[i]; //将数据复制到新区域}L.SizeL.Sizelen; //顺序表最大长度增加lendelete p;
}//在顺序表位置i处插入元素e
bool InsertSqList(SqList L,int i,int e){if(i1 || iL.length1) return false;if(L.length L.Size) return false;for(int jL.length;ji;j--){L.data[j]L.data[j-1];}L.data[i-1]e;L.length;return true;
}//在顺序表位置i处删除元素e
bool DeleteSqList(SqList L, int i, int e){if(i1 || iL.length1) return false;e L.data[i-1];for(int ji;jL.length;j){L.data[j-1]L.data[j];}L.length--;return true;
}//修改顺序表位置i处元素
bool ChangeSqList(SqList L, int i,int e){if(i1 || iL.length1) return false;L.data[i-1]e;return true;
}//查找顺序表位置i处元素
bool FindLoacteSqList(SqList L,int i,int e){if(i1 || iL.length1) return false;e L.data[i-1];return true;
}//查找元素e在顺序表中的位置
bool FindElemSqList(SqList L,int i, int e){for(int j0;jL.length;j){if(L.data[j]e){ij1;return true;}}return false;
}//销毁顺序表
void DeleteSqList(SqList L){free(L.data);L.data NULL;L.length L.Size 0;
}//输出顺序表
void PrintfSqList(SqList L){for(int i0;iL.length;i)coutL.data[i] ;
}int main(){SqList L;InitSqList(L);for(int i1;i10;i){InsertSqList(L,i,i);}PrintfSqList(L);coutendl;//对动态顺序表进行扩容cout对动态顺序表进行扩容endl;IncreaseSize(L,10);cout扩容后的长度为L.Sizeendl;InsertSqList(L,11,3);//不能直接隔着插如直接在19处插1因为中间是空的代码里的互换会出问题需要都初始化后才能插//InsertSqList(L,19,1);//但这样是可以的先都初始化然后再在19处插1for(int i12;i18;i) InsertSqList(L,i,i);InsertSqList(L,19,1);PrintfSqList(L);coutendl;//删除i处元素ecout删除i处元素eendl;int e;coutDeleteSqList(L,3,e)endl;couteendl;PrintfSqList(L);coutendlendl;//修改位置i处元素ecout修改位置i处元素eendl;coutChangeSqList(L,4,10)endl;PrintfSqList(L);coutendlendl;//查找//查找位置i处元素ecout查找位置i处元素eendl;coutFindLoacteSqList(L,4,e)endl;couteendlendl;//查找元素e的位置int i;cout查找元素e的位置endl;coutFindElemSqList(L,i,10)endl;coutiendl;//销毁动态顺序表DeleteSqList(L);return 0;
}三、结语
感谢大家一直以来的不断支持与鼓励码题集题库中的进阶塔350题正在逐步更新之后会逐步跟进星耀王者的题尽请期待 同时也希望这些题能帮助到大家一起进步祝愿每一个算法道路上的“苦行僧”们都能够历经磨难终成正果既然选择了这条路走到了这里中途放弃岂不是太过可惜
另附中国计算机学会的杰出会员、常务理事轩哥博士的B站视频讲解链接https://space.bilibili.com/518554541/?spm_id_from333.999.0.0供大家更好的进行学习与刷题(▽)~
愿你的结局配得上你一路的颠沛流离。