目录
前言
基本操作
插入
删除
按值查找
总结
本文主要记录自己学习数据结构的过程与收获,欢迎各位批评指正。
在这放个上一节关于顺序表实现静态/动态分配的链接~http://t.csdn.cn/JPZvHhttp://t.csdn.cn/JPZvH
本文只介绍插入、删除、按值查找操作。
根据顺序表在一段地址连续的存储单元中依次存储数据元素的特点,当在次序 i 插入一个数据时,原来次序为 i ~length 元素(如果有的话)的次序均加1,即后移一位。顺序表当前长度 length 加1。
需要注意的是,插入操作的前提是应当同时满足以下条件:
首先调用库,用来支持bool类型。
#include
按位序插入函数,为bool类型,可用来检验插入操作是否成功,方便后续调试。
bool ListInSert(SqList *L,int loc,int num){ //loc为所要插入的位序
if( loc< 1 || loc >L->length+1){ //判断i的合法性
return false;
}
if(L->length > L->Maxsize){ //判断是否还有位置插入
return false;
}
for(int i = L->length;i>=loc;i--){
L->data[i] = L->data[i-1];
}
L->data[loc-1] = num;
L->length++;
return true;
}
主函数如下:
其中创建、初始化、增加表长在上一篇博客中已经提到,具体可转http://t.csdn.cn/JPZvH
int main(void)
{
SqList L; //创建一个顺序表L
InitList(&L); //初始化
printf("The initial list:\n");
for(int j =0;j
与插入操作相反,当删除次序为 i 一个数据时,原来次序为 i+1 ~length 元素(如果有的话)的次序均减1,即前移一位,顺序表当前长度 length 减1。
需要注意的是,进行删除操作时,次序 i 应当 满足 1 < i < length 。
与插入操作相同,首先调用库,用来支持bool类型。
#include
按位序删除函数如下:
bool ListDelect(SqList *L,int loc ,int* e){ //loc为位序
if( loc<1 || loc >L->length){
printf("%d\n",loc);
return 0;
}
*e=L->data[loc-1];
for(int i = loc ; i < L->length;i++){ //loc后的所有元素
L->data[i-1] = L->data[i ]; //前移一位
}
L->length--;
return true;
}
主函数与前文类似,添加了删除操作。
int main(void)
{
SqList L; //创建一个顺序表L
InitList(&L); //初始化
printf("The initial list:\n");
for(int j =0;j
效果如下所示:
原理很简单,只需要遍历一遍顺序表,找到和目标值匹配的元素的位序返回即可。若找不到则返回-1.
查找函数代码如下:
int GetElem(SqList *L,int e){
for(int i = 0 ; i < L->length ; i++){
if(L->data[i] == e){
return i+1; //返回该值的位序
}
}
return -1; //若查找失败则返回-1.
}
主函数代码在上文的基础上增加查找函数,以查找 值为4 的元素位序为例。代码如下:
int main(void)
{
SqList L; //创建一个顺序表L
InitList(&L); //初始化
printf("The initial list:\n");
for(int j =0;j
效果如下所示:显示 值为4 的元素位序为 4 。
本文阐述了顺序表的一些基本操作并附上C语言代码。
关于按索引进行插入,删除的操作如有需要可评论留言。