#include <stdio.h> #include <stdlib.h>#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2#define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量 #define LISTINCREMENT 10 // 线性表存储空间的分配增量typedef int Status; typedef int ElemType;typedef struct { ElemType *elem; // 存储空间基址 int length; // 当前长度 int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位) }SqList;Status InitList_Sq(SqList *L); Status ListInsert_Sq(SqList *L, int i, ElemType *e);int main() { SqList sl; if(InitList_Sq(&sl) == 1) { printf("创建成功!"); int i = 0; int newElem1 = 33; int newElem2 = 25; int newElem3 = 11; int newElem4 = 43; i = ListInsert_Sq(&sl, 1, &newElem1); if(i == 1) { printf("%d\n", *(sl.elem)); printf("插入成功!"); } else { printf("插入失败!"); } i = ListInsert_Sq(&sl, 2, &newElem2); if(i == 1) { printf("%d\n", *(sl.elem + 1)); printf("插入成功!"); } else { printf("插入失败!"); } i = ListInsert_Sq(&sl, 1, &newElem3); if(i == 1) { printf("%d\n", *(sl.elem)); printf("插入成功!"); } else { printf("插入失败!"); } i = ListInsert_Sq(&sl, 2, &newElem4); if(i == 1) { printf("%d\n", *(sl.elem + 1)); printf("插入成功!"); } else { printf("插入失败!"); } } else { printf("创建失败!"); } return 0; }Status InitList_Sq(SqList *L) { L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType)); if(!L->elem) exit(OVERFLOW); // 存储分配失败 L->length = 0; // 空表长度为0 L->listsize = LIST_INIT_SIZE; // 初始存储容量 return OK; }// InitList_SqStatus ListInsert_Sq(SqList *L, int i, ElemType *e) { // 在顺序线性表L中第i个位置之前插入新的元素e, // i的合法值为 1 <= i <= ListLength_Sq(L) + 1 ElemType *q = NULL, *p = NULL; if(i < 1 || i > L->length + 1) return ERROR; // i值不合法 if(L->length == 0) // 如果是第一个插入元素,则在首地址插入 { *(L->elem) = *e; // 插入e ++L->length; // 表长增1 return OK; } else { if(L->length >= L->listsize) // 当前存储空间已满,增加分配 { ElemType *newbase = (ElemType *)realloc(L->elem, (L->listsize + LISTINCREMENT) * sizeof(ElemType)); if(!newbase) exit(OVERFLOW); // 存储分配失败 L->elem = newbase; // 新基址 L->listsize += LISTINCREMENT; // 增加存储容量 } //*q = &(L->elem[i-1]); // q为插入位置 q = L->elem + (i - 1); // q为插入位置 for(p = L->elem + (L->length - 1); p >= q; --p) // 插入位置及之后的元素右移 { *(p + 1) = *p; } *q = *e; // 插入e ++L->length; // 表长增1 return OK; } }// ListInsert_Sq