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;j<InitLength;j++)
{
sl->data[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+1)//i不在范围内
{
printf("插入位置不在表单范围内!\r\n\n");
return error;
}
if(i<L->length+1)//插入数据不在表尾
{
for(k=L->length;k>=i;k--)//插入位置后数据元素依次向后移动一位
L->data[k]=L->data[k-1];
}
L->data[i-1]=e;//插入新元素
L->length++;
return ok;
}
结果演示:
在任意位置插入数字:
也可以在头部和尾部插入:
(4)删:删除表中第i个位置数据
要删除第i个数据,即将i位置后数据依次左移,表长减一
示例代码:
Status sqlistDelete(sqlist *L,int i)
{
int k;
if(L->length==0)//空表
{
printf("无删除对象,这是一个空表!\n");
return error;
}
if(i<1||i>L->length)//i不在范围内
{
printf("找不到该删除对象!\r\n\n");
return error;
}
for(k=i;k<L->length;k++)//第i个位置后数据依次左移
L->data[k-1]=L->data[k];
L->length--;
return ok;
}
结果演示:
删除第三个数字
(5)改:改变表中第i个位置数据
示例代码:
Status sqlistChange(sqlist *L,int i,ElemType e)
{
int k;
if(L->length==0)//空表
{
printf("无改变对象,这是一个空表!\n");
return error;
}
if(i<1||i>L->length)//i不在范围内
{
printf("找不到该对象!\r\n\n");
return error;
}
L->data[i-1]=e;//改变数值
return ok;
}
(6)查:查找表中第i个位置数据,并返回该值
第i个数据即为元素da[i-1],在表单范围内返回该值即可
示例代码:
Status sqlistLocate(sqlist *L,int i)
{
int k;
if(L->length==0)//空表
{
printf("这是一个空表!\n");
return error;
}
if(i<1||i>L->length)//i不在范围内
{
printf("找不到该对象!\r\n\n");
return error;
}
return L->data[i-1];
}
结果演示:
(7)其他
此外还设计了打印表单,清零表单,重置表单等操作,详见完整代码
https://download.csdn.net/download/luotuoxiansheng/10746233
3.优劣势分析
优点 | 缺点 |
---|---|
|
|
以上就是对顺序存储结构的线性表的学习及分享。