回 帖 发 新 帖 刷新版面

主题:一个关于顺序表动态增加内存空间的问题

#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');
}

我在编译时说"要求左值" 
应该如何实现动态加空间呢

回复列表 (共1个回复)

沙发

用realloc函数 ..

我来回复

您尚未登录,请登录后再回复。点此登录或注册