1、创建顺序表
2、初始化顺序表
3、构建逻辑
宏定义和头文件:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define ElemType int
#define Status int
存储结构:
typedef struct{
ElemType *elem;
int Length;
int ListSize;
}SqList;
函数:ListInsertSq(SqList &L,int Location,ElemType Elem)
Location
:在Location前插入Elem
:要插入的元素
首先判断Location是否合法,不合法return -1.
接着判断是否已经存满,存满return -1.
在Location前插入一个数,把后面的元素都往后移一位。
最后把要添加的数,放在Location-1
处。
Location后面一共需要移动Length-Location
次,加上自己也要移动一次。
所以移动次数为n-i+1
主要函数代码:
Status ListInsertSq(SqList &L,int Location,ElemType Elem){
//首先判断传进来的位置是否正确
if (Location<0 || Location>L.Length) { return -1; }
//不正确的话,直接return,结束此函数
//接下来要判断当前的存储空间是否占满
if (L.Length >= L.ListSize)//占满了就要再次分配内存,先定义一个新的变量,来接收更新的内存空间
{
ElemType *NewBase;
NewBase = (ElemType*)realloc(L.elem, (L.ListSize + INCRESE) * sizeof(ElemType));
/*realloc函数语法 void*realloc(void *adress,size); */
if (!NewBase) exit(-1);//如果不成功,异常退出
L.elem = NewBase; //更新新地址
L.ListSize += INCRESE; //更新新线性表容量值
}
//开始插入,从最后一个开始挪
for (int i = L.Length-1; i >= L.Length - Location+1&&i>=1; i--)//当前i为最后一个的下标
{
L.elem[i+1] = L.elem[i]; //把当前的给后面的
}
L.elem[Location] = Elem;//最后腾出来的位置让elem上
L.Length += 1;//更新Length
return 1;
}
需要注意的是for
循环的条件。