线性表的顺序存储的结构代码:
#define MAXSIZE 20 //存储空间初始分配量
typedef int ElemType;
typedef struct
{
ElemType data [MAXSIZE]; //数组存储数据元素,最大值为MAXSIZE
int length; //线性表当前长度
}SqList
获得元素操作
思路:只要i的数值在数组下标范围内,就是把数组第i-1下标的值返回即可
#define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status; //初始条件:顺序线性表L已经存在, 1<=i<=ListLength(L) //操作结果:用e返回L中第i个数据元素的值 Status GetElem(SqList L,int i, ElemType *e) { if(L.length==0 || i<1 || i>L.length) return ERROR; *e = L.data[i-1]; return OK; }
插入操作
插入算法的思路:
如果插入位置不合理,抛出异常;
如果线性表长度大于等于数组长度,则抛出异常或动态增加容量;
从最后一个元素开始向前遍历到第i个位置,分别将他们都向后移动一个位置;
将要插入元素填入位置i处;
表长加1.
实现代码:
//初始条件:顺序线性表L已存在, 1<= i <=ListLength(L), //操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 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--) L->data[k+1]=L->data[k]; } L->data[i-1] = e; L->length++; return OK; }
删除操作
删除算法的思路:
如果删除位置不合理,抛出异常
取出删除元素
从删除元素位置开始遍历到最后一个元素位置,分别将他们都向前移动一个位置;
表长减1
//初始条件:顺序线性表L已经存在
//操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1
{
int k;
if(L->length == 0) //线性表为空
{
return ERROR;
}
*e = L->data[i-1];
if(i<L->length)// 如果删除不是最后位置
{
for(k = i;k<L->length;k++)将删除位置后继元素前移
{
L->data[k-1]=L->data[k];
}
L->length--;
return OK;
}
}
参考资料:<大话数据结构>