主题:一个关于顺序表动态增加内存空间的问题
#include<stdio.h>
#define MAXSIZE 5
typedef char elemtype;
typedef struct list
{ elemtype list[MAXSIZE];
int size;
}list;
int k;
setnull( list *l) //置空
{ l->size=0;
}
display( list *l) //显示
{ int j;
if(l->size==0) printf("空表!\n");
else
{ printf("顺序表为:");
if(l->size==1) printf("%c \n",l->size);
else
{ for(j=0;j<=l->size-2;j++)
{ printf(" %c ->",l->list[j]);
}
printf(" %c\n",l->list[j]);
}
}
}
insert( list *l,int i,elemtype x) //增加
{ int j;
elemtype *p;
if(i<1 || i>l->size+1 )
{ printf("插入位置不对!\n");
return(0);
}
else
{ if(l->size==MAXSIZE-1+k) //MAXSIZE-1+k是动态记录表的最大空间
{ p=&l->list[l->size];
p++;
p=(elemtype *)malloc(sizeof(elemtype));
l->list+(l->size+1)=p;
k++;
printf("动态增加空间\n");
}
}
l->size++;
for(j=l->size+1;j>=i;j--)
{ l->list[j]=l->list[j-1];
}
l->list[i-1]=x;
}
int length( list *l) //测量长度
{ return(l->size);
}
delete2( list *l,int i) //删除
{ int j;
if(i<i || i>l->size) printf("删除位置不对\n");
else
{ for(j=i-1;j<=l->size-1;j++)
{ l->list[j]=l->list[j+1];
}
l->size--;
printf("删除了第%d个元素\n",i);
}
}
int locate( list *l,elemtype x) //查找位置
{ int j;
for(j=0;j<=l->size-1 && l->list[j]!=x;j++)
{ if(j==l->size-1)
{ printf("找不到\n");
}
}
if(j!=l->size-1)
printf("%c在第%d位",x,j+1);
}
main()
{ list l;
k=0;
printf("创建新的顺序表\n");
setnull(&l);
display(&l);
insert(&l,1,'1');
insert(&l,1,'2');
insert(&l,3,'3');
insert(&l,4,'4');
insert(&l,5,'5');
insert(&l,6,'6');
insert(&l,7,'7');
insert(&l,8,'8');
insert(&l,9,'9');
insert(&l,10,'10');
insert(&l,11,'11');
insert(&l,12,'12');
insert(&l,13,'13');
display(&l);
printf("表长为%d",length(&l));
delete2(&l,1);
display(&l);
printf("表长为%d",length(&l));
locate(&l,'f');
}
我在编译时说"要求左值"
应该如何实现动态加空间呢
#define MAXSIZE 5
typedef char elemtype;
typedef struct list
{ elemtype list[MAXSIZE];
int size;
}list;
int k;
setnull( list *l) //置空
{ l->size=0;
}
display( list *l) //显示
{ int j;
if(l->size==0) printf("空表!\n");
else
{ printf("顺序表为:");
if(l->size==1) printf("%c \n",l->size);
else
{ for(j=0;j<=l->size-2;j++)
{ printf(" %c ->",l->list[j]);
}
printf(" %c\n",l->list[j]);
}
}
}
insert( list *l,int i,elemtype x) //增加
{ int j;
elemtype *p;
if(i<1 || i>l->size+1 )
{ printf("插入位置不对!\n");
return(0);
}
else
{ if(l->size==MAXSIZE-1+k) //MAXSIZE-1+k是动态记录表的最大空间
{ p=&l->list[l->size];
p++;
p=(elemtype *)malloc(sizeof(elemtype));
l->list+(l->size+1)=p;
k++;
printf("动态增加空间\n");
}
}
l->size++;
for(j=l->size+1;j>=i;j--)
{ l->list[j]=l->list[j-1];
}
l->list[i-1]=x;
}
int length( list *l) //测量长度
{ return(l->size);
}
delete2( list *l,int i) //删除
{ int j;
if(i<i || i>l->size) printf("删除位置不对\n");
else
{ for(j=i-1;j<=l->size-1;j++)
{ l->list[j]=l->list[j+1];
}
l->size--;
printf("删除了第%d个元素\n",i);
}
}
int locate( list *l,elemtype x) //查找位置
{ int j;
for(j=0;j<=l->size-1 && l->list[j]!=x;j++)
{ if(j==l->size-1)
{ printf("找不到\n");
}
}
if(j!=l->size-1)
printf("%c在第%d位",x,j+1);
}
main()
{ list l;
k=0;
printf("创建新的顺序表\n");
setnull(&l);
display(&l);
insert(&l,1,'1');
insert(&l,1,'2');
insert(&l,3,'3');
insert(&l,4,'4');
insert(&l,5,'5');
insert(&l,6,'6');
insert(&l,7,'7');
insert(&l,8,'8');
insert(&l,9,'9');
insert(&l,10,'10');
insert(&l,11,'11');
insert(&l,12,'12');
insert(&l,13,'13');
display(&l);
printf("表长为%d",length(&l));
delete2(&l,1);
display(&l);
printf("表长为%d",length(&l));
locate(&l,'f');
}
我在编译时说"要求左值"
应该如何实现动态加空间呢