顺序存储结构
1. 定义 :一段地址连续的存储单元一次存储线性表的数据元素
2. 代码块
最先需要定义的
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
ElemType date[MAXSIZE];//这是数据长度
int length;//这是线性表长度
}SqList;
date为存储数据所开辟的空间,即是通过数组来实现地址连续的存储,即顺序存储。
length是线性表的长度,为线性表中数据元素的个数,即data中已存放的数据。
地址计算方法…省略
3. 操作
1.获得元素操作
typedef int Status;
Status GetElem(SqList L,int i,ElemType *e)//用ElemType*类型是因为为了与表中data相同类型
{
if(i<1||i>L.length||L.length==0)//小于1连第一个元素都不是,大于元素数据长度则没有可以返回的数据元素,若Length=0则表示没有数据元素,为空表
return ERROR;
*e = L.data[i-1];
return OK;
}
2.插入操作
实现在第i个数据元素前插入数据元素
Status ListInsert(SqList *L,int i,ElemType e)
{
int k;
if(L->length==MAXSIZE)//线性表满了
return ERROR;
if(i<1||i>L->length+1)//当i不在范围
return ERROR;
if(i<=L->length)
{
for(k=L->length-1;k>=i-1;k--)//将第i个元素包括它自己往后移动一位
{
L->data[k+1] = L->data[k];
}
}
L->data[i-1]=e;//插入新元素
L->length++;
return OK;
}
3.删除操作
Status ListDelete(SqList *L,int i,ElemType *e)//e用来返回删除数据的值
{
int k;
if(L->length==0)//空表
return ERROR;
if(i<1||i>L->length)//i不在范围
return ERROR;
*e = L->data[i-1];
if(i<L->length)
{
for(k=i-1;k<L->length-1;k++)//书上写的是(k=i;k<L->length)开心就好
{
L->data[k]=L->data[k+1];
}
}
L->length--;
return OK;
}
如果是删除最后一个数据元素的话,没有相应的操作,那我觉得可能是通过length这个数值来进行线性表的运用。
还有更多的操作,在以后实践中用吧