顺序表插入数据

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循环的条件。

上一篇:数据结构:有序顺序表里插入一个数,使得顺序表依然有序。


下一篇:静态链表过程演示及代码实现(A - B) U (B - A)