#include <stdio.h>
#include<process.h>
#include<stdlib.h>
#include<ctype.h>
#include<limits.h>
#include <malloc.h>
using namespace std;
typedef long long ll;
#define overlow -2
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
const int list_init_size=10;
const int listincrement=2;
typedef struct
{
int *elem;
int length;
int listsize;
} List;
int listinit(List &l) //初始化
{
l.elem=(int*)malloc(list_init_size*sizeof(int));
if(!l.elem)
exit(overlow);
l.length=0;
l.listsize=list_init_size;
return 1;
}
int listinsert(List &l,int i,int e)//插入
{
int *newbase,*q,*p;
if(i<1||i>l.length+1)
return 0;
if(l.length>=l.listsize)
{
newbase=(int*)realloc(l.elem,(l.listsize+listincrement)*sizeof(int));
if(!newbase)
exit(overlow);
l.elem=newbase;
l.listsize+=listincrement;
}
q=l.elem+i-1;
for(p=l.elem+l.length-1; p>=q; --p)
*(p+1)=*p;
*q=e;
++l.length;
return 1;
}
int listdelete(List &l,int i,int *e)//删除
{
int *p,*q;
if(i<1||i>l.length)
return 0;
p=l.elem+i-1;
*e=*p;
q=l.elem+l.length-1;
for(++p;p<=q;++p) *(p-1)=*p;
l.length--;
return 1;
}
int listreverse(List &l)//逆序
{
int t,i;
for(int i=0;i<l.length/2;i++)
{
t=l.elem[i];
l.elem[i]=l.elem[l.length-i-1];
l.elem[l.length-i-1]=t;
}
return 1;
}
int listprint(List l)//输出
{
int i;
for(int i=0;i<l.length;i++) printf("%d ",l.elem[i]);
puts("");
return 1;
}
int main()//test
{
List l;
int i,j,t;
if(listinit(l))
for(j=1;j<=5;j++)
i=listinsert(l,j,2*j);
listprint(l);
listinsert(l,2,20);
puts("在2处插入20");
listprint(l);
puts("删除4的值");
listdelete(l,4,&t);
printf("The Deleted value is %d\n",t);
listprint(l);
puts("进行逆序交换");
listreverse(l);
listprint(l);
return 0;
}