bool ListInsert_Sq(Sqlist*L, int a, ElemType e)//第二个参数表示在第a个位置上插入{if(a<1|| a>L->length +1)//判断插入位置是否合法{printf("所选的插入位置不合法!!\n");returnfalse;}if(L->length ==L->listsize)//在没有插入后,超过了链表容量,必须增加容量{
ElemType* ptr =L->elem;L->elem =(ElemType*)malloc(sizeof(ElemType)*L->listsize*2);if(L->elem ==NULL){printf("内存分配失败\n");returnfalse;}L->listsize=L->listsize*2;for(int i =0; i <L->length; i++)//把原来内存中的数据移植到现在新分配的内存上去{L->elem[i]= ptr[i];}free(ptr);//释放之前的内存}for(int i =L->length; i >=a ; i--)//把第a个位置后的位置都往后移动一位{L->elem[i]=L->elem[i-1];}L->elem[a -1]= e;//空出来的位置填eL->length++;//元素+1returntrue;}
删除操作
bool ListDelete_Sq(Sqlist*L, int a){if(a<1|| a>L->length +1){printf("所选的插入位置不合法!!\n");returnfalse;}for(int i = a-1; i <L->length; i++){L->elem[i]=L->elem[i+1];}L->length--;returntrue;}
总代码
#define LIST_INIT_SIZE5//线性表存储空间的初始化分配量
#define LISTINCREMENT1//线性表存储空间的分配增量
#define ElemType int //定义基本类型为int
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
ElemType* elem;//存储空间基址
int length;//当前长度
int listsize;//当前分配的存储容量(以sizeof(ElemType)为单位)}Sqlist;//初始化线性表
bool InitList_Sq(Sqlist *L){//构造一个空的线性表L->elem =(ElemType*)malloc(sizeof(int)*LIST_INIT_SIZE);if(L->elem ==NULL){printf("分配内存失败");returnfalse;}L->length =0;L->listsize =LIST_INIT_SIZE;returntrue;}//插入元素
bool ListInsert_Sq(Sqlist*L, int a, ElemType e){if(a<1|| a>L->length +1){printf("所选的插入位置不合法!!\n");returnfalse;}if(L->length ==L->listsize)//在没有插入后,超过了链表容量,必须增加容量{
ElemType* ptr =L->elem;L->elem =(ElemType*)malloc(sizeof(ElemType)*L->listsize*2);if(L->elem ==NULL){printf("内存分配失败\n");returnfalse;}L->listsize=L->listsize*2;for(int i =0; i <L->length; i++)//把原来内存中的数据移植到现在新分配的内存上去{L->elem[i]= ptr[i];}free(ptr);//释放之前的内存}for(int i =L->length; i >=a ; i--){L->elem[i]=L->elem[i-1];}L->elem[a -1]= e;L->length++;returntrue;}//删除元素
bool ListDelete_Sq(Sqlist*L, int a){if(a<1|| a>L->length +1){printf("所选的插入位置不合法!!\n");returnfalse;}for(int i = a-1; i <L->length; i++){L->elem[i]=L->elem[i+1];}L->length--;returntrue;}voidprint(Sqlist*L){for(int i =0; i <L->length; i++){printf("%d ",L->elem[i]);}printf("\n");}
int main(){
Sqlist*L=(Sqlist*)malloc(sizeof(Sqlist));L->elem =NULL;InitList_Sq(L);for(int i =1; i <20; i++){ListInsert_Sq(L, i, i);}ListInsert_Sq(L,2,1);ListInsert_Sq(L,5,11);ListInsert_Sq(L,2,111);printf("LIST_SIZE:%d\n",L->length);printf("LIST_CONTAINER:%d\n",L->listsize);print(L);return1;}