读书人

求解一个关于线性表的有关问题

发布时间: 2012-03-12 12:45:33 作者: rapoo

求解一个关于线性表的问题
这是我写的一个线性表的简单操作:

#include<stdio.h>
#include<stdlib.h>

#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

typedef struct {
long *elem;
int length;
int listSize;
}List;

bool InitList(List L){
L.elem = (long *)malloc(LIST_INIT_SIZE * sizeof(long));
if(!L.elem){
printf("线性表创建失败!");

return false;
}
L.length = 0;
L.listSize = LIST_INIT_SIZE;
return true;
}

bool ListPosInsert(List L,int pos,int x){
if((pos < 1) || (pos > L.length + 1)){
return false;
}
if(L.length >= L.listSize){
long *newbase = (long *)realloc(L.elem,(L.listSize+LISTINCREMENT)*sizeof(long));
if(!newbase) return false;
L.elem = newbase;
L.listSize += LISTINCREMENT;
}
long *q = &(L.elem[pos -1]);
for(long *p = &(L.elem[L.length - 1]);p >= q;--p){
*(p + 1) = *p;
}
*q = x;
L.length++;
return true;

}

void ListTraverse(List L)
{
for(int i = 0;i < L.length;i++){
printf("%d ",L.elem[i]);

}

}

int _tmain(int argc, _TCHAR* argv[]){
List La = {NULL,0,0};
bool b = InitList(La);
if(b) {printf("YES");}
else {printf("NO");}
ListPosInsert(La,1,11);
ListPosInsert(La,2,22);
ListPosInsert(La,3,33);
ListTraverse(La);
system("pause");
return 0;
}

我想插入三个元素,然后遍历出来,可是运行结果却没有,只输出了一个表示初始化成功的YES。。。


[解决办法]
1.参数用结构体指针,函数结束返回指针
2.用二级指针做参数
[解决办法]
参数换成引用或者指针

读书人网 >C语言

热点推荐