顺序表即线性表的顺序存储结构 ,指的是用一段地址连续的存储单元依次存储线性表数据元素。在线性表中,每个数据元素的类型都相同,一般可以用一维数组来实现顺序存储结构。
完整代码下载地址 https://download.csdn.net/download/luotuoxiansheng/10746233
利用c语言结构体来建立顺序表的结构,顺序表结构体中包含数据和表长。
#define MAXSIZE 10 //存储空间初始分配量
typedef int ElemType; //定义类型,此处为int(可变)
typedef int Status;
typedef struct
{
ElemType data[MAXSIZE];//创建数组存储空间
int length; //线性表当前长度
}sqlist;
初始化一个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);
}
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(ilength+1)//插入数据不在表尾
{
for(k=L->length;k>=i;k--)//插入位置后数据元素依次向后移动一位
L->data[k]=L->data[k-1];
}
L->data[i-1]=e;//插入新元素
L->length++;
return ok;
}
要删除第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;klength;k++)//第i个位置后数据依次左移
L->data[k-1]=L->data[k];
L->length--;
return ok;
}
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;
}
第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];
}
此外还设计了打印表单,清零表单,重置表单等操作,详见完整代码
https://download.csdn.net/download/luotuoxiansheng/10746233
优点 | 缺点 |
---|---|
以上就是对顺序存储结构的线性表的学习及分享。