// 头文件
include <stdio.h>
include <stdlib.h>
define MAXSIZE 10
//结构的定义部分
const int INITSIZE=4;
const int INCREMENT=2;
typedef int ElemType;
//顺序存储结构
typedef struct{
ElemType *elem;
int length;
int listsize;
} SqList;
SqList A;
void InitList(SqList *L);//初始化
int ListLength(SqList L);
void ListOutput(SqList L);
void ListInfo(SqList L);
void ListInsert(SqList *L,int pos,ElemType e);//在i位置插入
void DeleteSqList(SqList *L,int local);
ElemType QuerySqList(SqList L,int pos);
void ModifySqList(SqList *L,int pos,ElemType e);
int main(){
printf("顺序表结构的测试:\n");
printf("***************************************\n");
printf("生成操作:InitList(A)\n");
InitList(&A);
ListInfo(A);
printf("***************************************\n");
printf("插入操作:ListInsert(A,1,1)\n");
ListInsert(&A,1,1);
ListInfo(A);
printf("***************************************\n");
printf("插入操作:ListInsert(A,2,2)\n");
ListInsert(&A,2,2);
ListInfo(A);
printf("***************************************\n");
printf("插入操作:ListInsert(A,2,2)\n");
ListInsert(&A,3,3);
ListInfo(A);
printf("***************************************\n");
printf("插入操作:ListInsert(A,2,2)\n");
ListInsert(&A,4,4);
ListInfo(A);
printf("***************************************\n");
printf("插入操作:ListInsert(A,2,2)\n");
ListInsert(&A,5,5);
ListInfo(A);
printf("***************************************\n");
printf("delete操作:ListInsert(A,3)\n");
DeleteSqList(&A,3);
ListInfo(A);
printf("delete操作:ListInsert(A,3)\n");
DeleteSqList(&A,3);
ListInfo(A);
printf("插入操作:ListInsert(A,4,500)\n");
ListInsert(&A,4,500);
ListInfo(A);
ElemType b=QuerySqList(A,4);
printf("query操作:%d\n",b);
ModifySqList(&A,1,100);
ListInfo(A);
return 0;
}
//结构的生成操作
void InitList(SqList *L)
{
printf("sizeof=%d\n",sizeof(L->elem));
L->elem=(int )malloc(INITSIZEsizeof(int));
if(!L->elem)
{
printf("init fail\n");
exit(0);
}
printf("sizeof=%d\n",sizeof(L->elem));
L->length=0;
L->listsize=INITSIZE;
printf("size=%d\n",L->listsize);
printf("init success\n");
}
int ListLength(SqList L)
{
return L.length;
}
void ListOutput(SqList L)
{
printf("(");
int i=0;
while(i<L.length-1){
printf("%d,",L.elem[i]);
i++;
}
//for(int i=0;i<L.length-1;i++){
// printf("%d,",L.elem[i]);
//cout<<L.elem[i]<<",";
//if(L.length-1>=0) cout<<L.elem[L.length-1];
//}
if(L.length-1>=0){
printf("%d",L.elem[L.length-1]);
}
printf(")\n");
}
void ListInfo(SqList L)
{
printf(" ");
ListOutput(L);
if(ListLength(L)==0) printf(" Empty:Yes\n");
else printf(" Empty:No\n");
printf(" Length=%d,Size=%d\n",ListLength(L),L.listsize) ;
}
void ListInsert(SqList *L,int pos,ElemType e)
{
printf("size=%d\n",L->length);
if(pos<1||pos>L->length+1) {
printf("pos is invalid \n");
exit(1);
};
if(L->length>=L->listsize)
{
ElemType *newbase=(ElemType )malloc((L->listsize+INCREMENT)sizeof(int));
//ElemType newbase[L->listsize+INCREMENT];
if(!newbase) {
exit(1);
}
printf("expand List\n");
int i=0;
while(i<L->length){
newbase[i]=L->elem[i];
i++;
}
// for(int i=0;i<L.length;i++){
// newbase[i]=L.elem[i];
// }
// delete [] L.elem;
L->elem=newbase;
L->listsize+=INCREMENT;
printf("expand List success\n");
}
int j=L->length-1;
printf("j=%d\n",j);
printf("L->length=%d\n",L->length);
while(j>=pos-1){
L->elem[j+1]=L->elem[j];
j--;
}
printf("j=%d\n",j);
// for(int i=L.length-1;i>=pos-1;i--){
// L.elem[i+1]=L.elem[i];
// }
//printf("elem=%d\n",L->elem[pos-1]);
L->elem[pos-1]=e;
printf("length=%d\n",L->length);
L->length++;
printf("length=%d\n",L->length);
}
void DeleteSqList(SqList *L,int local){
int i=L->length;
if(local>i){
printf("非法位置\n");
}else if(local==i){
L->length--;
}else{
for(int j=local-1;j<L->length-1;j++){
L->elem[j]=L->elem[j+1];
}
L->length--;
}
}
ElemType QuerySqList(SqList L,int pos){
if(L.length>=pos){
return L.elem[pos-1];
}else{
printf("非法位置\n");
exit(0);
}
};
void ModifySqList(SqList *L,int pos,ElemType e){
if(L->length>=pos){
L->elem[pos-1]=e;
}else{
printf("非法位置\n");
exit(0);
}
}