1.线性表的声明
#define MAXSIZE 20 //存储空间初始分配量
typedef int ElemType; //ElemType 根据情况而定,这里暂时使用int
typedef struct {
ElemType data[MAXSIZE]; //数组存储数据元素,最大值为MAXSIZE
int length; //线性表当前长度
}Sqlist;
//其他相关声明
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
Status ListInit(Sqlist* L);
Status GetElem(Sqlist L, int i, ElemType* e);
Status ListInsert(Sqlist* L, int i, ElemType e);
Status ListDelete(Sqlist* L, int i, ElemType* e);
2.线性表的初始化
Status ListInit(Sqlist *L) {
if (L != NULL)
{
//(*L).length = 0;
L->length = 0;
}
for (int i = 0; i < 10; i++)
{
if (L != NULL) {
L->data[i] = i + 1;
L->length++;
}
}
return OK;
}
3. 获取线性表中的元素
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;
}
4.线性表中插入元素
//插入算法的思路
//如果插入位置不合理,抛出异常
//如果线性表长度大于等于数组长度,则抛出异常或动态增加容量
//从最后一个元素开始向前遍历到地i个位置,分别将他们都向后移动一个位置
//将要出入元素填入位置i处
//表长加1
Status ListInsert(Sqlist *L, int i, ElemType e) {
if (L->length == MAXSIZE) return ERROR; //顺序线性表已经满了
if (i<1 || i>L->length) return ERROR; //i不在范围内
int k;
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;
}
5.线性表中删除元素
//删除算法的思路
//如果删除位置不合理,抛出异常
//取出删除元素
// 从删除元素位置开始遍历到最后一个元素位置,分别将他们都向前移动一个位置
// 表长减1
Status ListDelete(Sqlist *L, int i, ElemType *e) {
int k;
if (L->length == 0) return ERROR; //线性表为空
if (i<1 || i>L->length) 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;
}
备注:参考《大话数据结构》