数据结构4
获得元素操作
实现GetElem的具体操作,即将线性表L中的第i个位置的元素值返回。(我们只需把数组第i-1下标的值返回即可)
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
//Status 是函数的类型,其值是函数结果状态代码,如OK等
//初始条件,顺序表L已存在,i <= 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;
}
插入操作
实现ListInsert(*L, i, e),即在线性表L中的第i个元素位置插入新元素e。
思路:
- 如果插入位置不合理,抛出异常
- 如果线性表的长度大于等于数组长度,则抛出异常或动态增加数组容量
- 从最后一个y元素开始向前遍历到第i个位置m,分别d将它们都向后移动一个位置
- 将要插入元素填入位置i处
- 线性表长度j+1
//初始条件,顺序表L已存在,i <= 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;
}