#include <stdio.h>
#include<malloc.h>
#define MaxSize 20
#define Size 5
typedef struct{
int*data;
int dlen;
int len;
}SqList;
/*初始化线性表*/
void Sq_Init(SqList*L){
L->data=(int*)malloc(MaxSize*sizeof(int));
if(!L->data){
printf("分配内存空间失败!");
}
else{
L->dlen=0;
L->len=MaxSize;
}
};
/*打印线性表*/
void Printf_Sq(SqList*L){
int i;
if(!L->data){
printf("线性表不存在");
}
else{
for(i=0;i<L->dlen-1;i++){
printf("%d\t",L->data[i]);
}
}
}
/*增加线性表空间*/
void ZSq(SqList*L){
//重更新分配存储空间
int*newbase=(int*)realloc(L->data, (L->dlen + Size) * sizeof(int));
if(!newbase){
printf("增加存储空间失败");
}
else {
L->data=newbase;
L->len+=Size;
}
}
/*插入数据到线性表,输入数据在表尾部*/
void InsetData(SqList*L,int x){
if(!L->data){
printf("线性表不存在");
}
else {
int i;
if(L->dlen==0){
L->dlen=1;
}
i=L->dlen-1;
L->data[i]=x;
L->dlen++;
}
};
/*销毁线性表*/
void DestryList(SqList*L){
free(L->data);
};
/*重置线性表*/
void ClearList(SqList*L){
L->dlen=0;
};
/*给定一个位置插入数据*/
void Insetother(SqList*L,int i,int x){
//插入线性表,位置,数据
int j;
L->dlen++;
for(j=L->dlen-1;i-1<=j;j--){
L->data[j+1]=L->data[j];
}
L->data[i-1]=x;
};
/*删除指定位置的数据*/
void Delete(SqList*L,int x){
//线性表,数据的位置
int j;
if(1>x |x>L->dlen ){
printf("删除数据不在线性表数据范围");
}
else {
for(j=x;j<=L->dlen-1;j++){
L->data[j-1]=L->data[j];
}
}
L->dlen--;
printf("删除成功\n");
};
int main(){
SqList L;
int y,i,x,a,b;
Sq_Init(&L);
printf("请输入线性表数据的个数:");
scanf("%d",&y);
printf("%d\n",y);
for(i=0;i<y;i++){
scanf("%d",&x);
InsetData(&L,x);
}
printf("数据表中的内容:\n");
Printf_Sq(&L);
printf("\n");
printf("请选择插入数据的位置及数据:\n");
scanf("%d%d",&a,&b);
Insetother(&L,a,b);
Printf_Sq(&L);
printf("\n");
printf("请选择清除数据的位置及数据:\n");
scanf("%d",&b);
Delete(&L,b);
Printf_Sq(&L);
DestryList(&L);
}