#include
#include
//存放的数据类型
#define ElemType int
//表的大小
#define MAX_SIZE 100
typedef struct {
ElemType *e;//数据
int len;//已经存放的数据数目
int size;//可以存放的数据数目
} SqList;
void initSqList(SqList* list);
void showList(SqList* list);
void appendElem(SqList*list,ElemTypee);
void insertElem(SqList* list,int i,ElemType e) ;
void delElem(SqList *list,int i);
int main(int argc, char *argv[])
{
SqList *list=(SqList*)malloc(sizeof(SqList));
initSqList(list);
appendElem(list,3);
appendElem(list,6);
appendElem(list,1);
appendElem(list,2);
showList(list);
insertElem(list,3,10);
showList(list);
delElem(list,4);
showList(list);
free(list);
return 0;
}
//初始化
void initSqList(SqList* list){
list->e = (ElemType *)malloc(sizeof(ElemType)*MAX_SIZE);
list->len=0;
list->size=MAX_SIZE;
printf("initList successful!\n");
return;
}
//打印表中数据
void showList(SqList* list){
if(list == NULL || list->len == 0) {
printf("this list is empty!\n");
return;
}
int i,len;
len=list->len;
printf("this list have %d elems:\n",len);
for(i=0;i
printf("%d ",list->e[i]);
}
printf("\n");
return;
}
//在表的最后附加数据
void appendElem(SqList*list,ElemTypee){
int len=list->len,size=list->size;
if(len+1>size) {
printf("append err:this list is full\n");
return;
}
list->e[len] = e;
list->len++;//不能使用局部变量len++
return;
}
//在表的第i个元素之前插入新数据
void insertElem(SqList* list,int i,ElemType e){
int len=list->len,size=list->size;
if(len+1>size || i<1 || i>len+1) {
printf("insert err\n");
return;
}
if(i==len+1) {
appendElem(list,e);
return;
}
int j;
ElemType *p;
for(j=len;j>=i;j--){//第i个元素以及以后元素依次向后移动一位
p=&list->e[j];
*p = list->e[j-1];
}
list->e[j]=e;
list->len++;
return;
}
//删除第i个元素
void delElem(SqList *list,int i){
int len=list->len;
if(i<1 || i>len || len<0){
printf("del err\n");
return;
}
int j;
ElemType *p;
for(j=i;j
p=&list->e[j-1];//数组元素序号由0开始,元素位数由1开始
*p=list->e[j];
}
list->len--;
return;
}