#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#define LIST_INIT_SIZE 5 //线性表存储空间的初始分配量
#define LISTINCREMENT 5 //线性表存储空间的分配增量
typedef int ElemType;
typedef int Status;
#define OK 1
#define OVERFLOW -1
typedef struct {
ElemType *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)
}Sqlist;
//构造一个长度为5的线性表
Status InitList_sq(Sqlist &L)
{
int x;
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); //开辟5*ElemType字节长度的地址空间,并返回首地址
if(!L.elem)exit(OVERFLOW);
printf("创建一个长度为5的线性表\n"); //存储分配失败
for(int i =0;i<LIST_INIT_SIZE;i++)
{
printf("请输入第%d个元素:",i+1);
scanf("%d",&x);
L.elem[i]=x;
}
L.length=5; //空表长度为5
L.listsize=LIST_INIT_SIZE*sizeof(ElemType); //初始存储容量
return OK;
}
//在指定元素前插入一个新元素,删除第三个元素
void InsterElem(Sqlist *L ,int x,int num){//x:位置,num元素
int i=0;
for(i=0;i<3-1;i++){
L->elem[i+2]=L->elem[i+3];
}
L->length--;//顺序表长度-1
//1,2,3,4,5
L->length++;//顺序表长度+1
for(i=L->length;i>=x;i--){
L->elem[i-1]=L->elem[i-2];
}
L->elem[x-2]=num;
}
//输出线性表内容
void printList(Sqlist L) {
int i=0;
while(i<L.length) {
printf("%d\t",L.elem[i]);
i++;
}
}
int main() {
Sqlist L;//定义线性表
InitList_sq(L); //构造一个长度为5的线性表
int x,num;
printf("请输入要在那个元素前面插入元素:\n");
scanf("%d",&x);
printf("请输入插入新的元素:\n");
scanf("%d",&num);
if(x<1||x>L.length){
printf("越界了");
}else{
InsterElem(&L,x,num);
}
printList(L);
return 0;
}