#include<stdio.h>
#include<stdlib.h>
#define Init_size 100//初始长度
#define ListIncrement//增量
#define Elemtype int
#define ERROR 0
#define OK 1
typedef struct{
Elemtype *elem;//存储空间基址
int length; //当前长度
int listsize;//容量
}SqList;
//构造空表
int InitList_Sq(SqList &l)
{
l.elem=(Elemtype*)malloc(Init_size*sizeof(Elemtype));
if(!l.elem){
printf("初始化失败!\n");
return ERROR;
}
l.length=0;
l.listsize=Init_size;
return OK;
}
//插入元素
int Insert_Sq(SqList &l,int i,Elemtype e)//第i个位置插入e
{
if(i<1||i>l.length+1)//插入位置只能为0~l.length+1
{
printf("插入位置不合法!\n");
return ERROR;
}
if(l.length>=l.listsize)//当前存储空间已满,增加分配
{
int *newbase=(Elemtype*)realloc(l.elem,(l.listsize+Init_size)*sizeof(Elemtype));
if(!newbase) return ERROR;
l.elem=newbase;
l.listsize+=Init_size;
}
//插入位置后的元素后移一个单位
int *p,*q;
q=&l.elem[i-1]; //第i个元素的存储位置为l.elem[i-1]
for(p=&l.elem[l.length-1];p>q;p--) *(p+1)=*p;
*q=e;//插入e
l.length+=1;//表长加一
return OK;
}
//删除元素,并返回
int ListDelete_Sq(SqList &l,int i)
{
if(i<1||i>l.length)//删除已有元素
{
printf("删除位置不合法!\n");
return ERROR;
}
int *q,*p;
p=&l.elem[i-1];
for(q=&l.elem[l.length-1];p<q;p++) *p=*(p+1);
l.length--;
return OK;
}
//初始化表中元素
void input(SqList &l)
{
int n,a;
printf("输入初始化元素个数:");
scanf("%d",&n);
printf("依次输入(%d)元素:",n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a);
Insert_Sq(l,i,a);
}
}
//输出表中元素
void print(SqList l)
{
printf("表中元素为(%d):",l.length);
for(int i=0;i<l.length;i++)
{
printf("%d ",l.elem[i]);
}
printf("\n");
}
int main(){
SqList l;
InitList_Sq(l);
input(l);
print(l);
ListDelete_Sq(l,3);
print(l);
}
运行结果: