读书人

线性表顺序实现的有关问题

发布时间: 2012-02-14 19:19:19 作者: rapoo

线性表顺序实现的问题
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
int *elem;
int length;
int listsize;
}sqlist;
int Initlist(sqlist &L)//构造一个空的线性表
{
L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem) printf( "malloc wrong ");
L.length=0;
L.listsize=LIST_INIT_SIZE;
for(int i=0;i <L.listsize;i++){
L.elem[i]=i;
}
return 0;
}
int insert(sqlist &L,int x,int i)//插入元素
{ int *q;
if(i <1||i> L.length+1) printf( "insert wrong ");
//当空间不足时候.重新申请
/* if(L.length> =L.listsize){
newbase=(int *)malloc(L.elem,
(L.listsize+LISTINCREMENT)*sizeof(int*));
if(!newbase) printf( "can not add ");
L.elem=newbase;
L.length += LISTINCREMENT;
} */
q = &(L.elem[i-1]);
*q=x;
++L.length;
return 0;
}
int deletelist(sqlist &L,int &x,int i)
{
int *p,*q;
if((i <1)||(i> L.length))printf( "delete wrong ");
p = &(L.elem[i-1]);
x=*p;
q=L.elem+L.length-1;
for(++p;p <=q;++q)
*(p-1)=*p;
--L.length;
return 0;
}
int printlist(sqlist &L)
{
for(int i=0;i <L.length;i++)
printf( "%d ",L.elem[i]);
return 0;
}
int main()
{
int n=1,x,i;
while(n){
printf( "1--建立顺序表\n ");
printf( "2--插入顺序表\n ");


printf( "3--删除顺序表\n ");
printf( "4--打印顺序表\n ");
printf( "请输入: ");
scanf( "%d ",&n);
switch(n){
case 1:int Initlist(sqlist &L);
break;
case 2:printf( "请输入要插入的数 ");
scanf( "%d ",&x);
printf( "请输入要插入的位置 ");
scanf( "%d ",&i);
int insert(sqlist &L,int x,int i);
break;
case 3:printf( "请输入要删除的数的位置 ");
scanf( "%d ",&i);
int deletelist(sqlist &L,int &x,int i);
case 4:int printlist(sqlist &L);
break;
return 0;
}
}
getch();
}

问题一: //当空间不足时候.重新申请
/* if(L.length> =L.listsize){
newbase=(int *)malloc(L.elem,
(L.listsize+LISTINCREMENT)*sizeof(int*));
if(!newbase) printf( "can not add ");
L.elem=newbase;
L.length += LISTINCREMENT;
} */ 出现编译错误;
问题二:线性表无法打印

请指教> > > > > > > > > > > > > >

先谢谢拉

[解决办法]
malloc只有一个参数,就是申请的内存大小。lz你传了2个,所以编译错误。
线性表打印标准库里没有现成的函数,要自己写。遍历线性表,再逐个打印。
[解决办法]
把malloc函数改成realloc函数,
newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));///注意sizeof里面是int而不是int *,还有打印函数如楼上所说需要自己写,一个节点一个节点的遍历线性表,一个节点一个节点的打印

读书人网 >C语言

热点推荐