1.概念
顺序表即线性表的顺序存储结构 ,指的是用一段地址连续的存储单元依次存储线性表数据元素。在线性表中,每个数据元素的类型都相同,一般可以用一维数组来实现顺序存储结构。
2.实现
完整代码下载地址 https://download.csdn.net/download/luotuoxiansheng/10746233
(1)建立顺序表的结构
利用c语言结构体来建立顺序表的结构,顺序表结构体中包含数据和表长。
#define MAXSIZE 10 //存储空间初始分配量
typedef int ElemType; //定义类型,此处为int(可变)
typedef int Status;
typedef struct
{
ElemType data[MAXSIZE];//创建数组存储空间
int length; //线性表当前长度
}sqlist;
(2)初始化表单
初始化一个n长度的顺序表并打印,表单数据初始化为1~n,n为函数形参InitLength。
1
2
3
4
5
…
n
示例代码:
void sqlistInit(sqlist *sl,int InitLength)
{
int j;
sl->length=0;
printf("当前表单:");
for(j=0;jdata[j]=j+1;
printf("%d ",sl->data[j]);
++sl->length;
}
printf("\n初始表单长度:%d\n",sl->length);
}
结果演示:
(3)增:在表中第i个位置增加数据e
示例代码:
Status sqlistInsert(sqlist *L,int i,ElemType e)
{
int k;
if(L->length==MAXSIZE)//表已满
{
printf("表已满!\n");
return error;
}
if(i<1||i>L->length&#43;1)//i不在范围内
{
printf("插入位置不在表单范围内&#xff01;\r\n\n");
return error;
}
if(ilength&#43;1)//插入数据不在表尾
{
for(k&#61;L->length;k>&#61;i;k--)//插入位置后数据元素依次向后移动一位
L->data[k]&#61;L->data[k-1];
}
L->data[i-1]&#61;e;//插入新元素
L->length&#43;&#43;;
return ok;
}
结果演示&#xff1a;
在任意位置插入数字&#xff1a;
也可以在头部和尾部插入&#xff1a;
(4)删&#xff1a;删除表中第i个位置数据
要删除第i个数据&#xff0c;即将i位置后数据依次左移&#xff0c;表长减一
示例代码&#xff1a;
Status sqlistDelete(sqlist *L,int i)
{
int k;
if(L->length&#61;&#61;0)//空表
{
printf("无删除对象&#xff0c;这是一个空表&#xff01;\n");
return error;
}
if(i<1||i>L->length)//i不在范围内
{
printf("找不到该删除对象&#xff01;\r\n\n");
return error;
}
for(k&#61;i;klength;k&#43;&#43;)//第i个位置后数据依次左移
L->data[k-1]&#61;L->data[k];
L->length--;
return ok;
}
结果演示&#xff1a;
删除第三个数字
(5)改&#xff1a;改变表中第i个位置数据
示例代码&#xff1a;
Status sqlistChange(sqlist *L,int i,ElemType e)
{
int k;
if(L->length&#61;&#61;0)//空表
{
printf("无改变对象&#xff0c;这是一个空表&#xff01;\n");
return error;
}
if(i<1||i>L->length)//i不在范围内
{
printf("找不到该对象&#xff01;\r\n\n");
return error;
}
L->data[i-1]&#61;e;//改变数值
return ok;
}
(6)查&#xff1a;查找表中第i个位置数据,并返回该值
第i个数据即为元素da[i-1]&#xff0c;在表单范围内返回该值即可
示例代码&#xff1a;
Status sqlistLocate(sqlist *L,int i)
{
int k;
if(L->length&#61;&#61;0)//空表
{
printf("这是一个空表&#xff01;\n");
return error;
}
if(i<1||i>L->length)//i不在范围内
{
printf("找不到该对象&#xff01;\r\n\n");
return error;
}
return L->data[i-1];
}
结果演示&#xff1a;
(7)其他
此外还设计了打印表单&#xff0c;清零表单&#xff0c;重置表单等操作&#xff0c;详见完整代码
https://download.csdn.net/download/luotuoxiansheng/10746233
3.优劣势分析
优点
缺点
不需要为表中元素之间的逻辑关系而增加额外的存储空间
可以快速地存取表中任意位置的元素
插入和删除操作需要移动大量元素
当线性表长度变化较大时&#xff0c;难以确定存储空间的容量
造成存储空间的“碎片”及浪费
以上就是对顺序存储结构的线性表的学习及分享。