C语言实现顺序表/表头指针问题

来源:百度知道 编辑:UC知道 时间:2024/05/20 19:09:07
我是这样实现的
#include <stdio.h>
typedef struct SqList //顺序表
{
int *elem;
//表头指针(这个指针的用法不大懂/书上算法 把他当数组用在)
int length; //表长
int listsize; //最大长度
};
int InitList(SqList list1)
{
list1.elem=new int[100];
//给表分配100个空间,地址给先前定义的指针
if(!list1.elem)
exit(1);
list1.length=4;
list1.listsize=100;
list1.elem[0]=2;//这2个是给顺序表先前定义的空间填值,不知道能不能这样用,编译的结果没有错误,而且好像这个位置赋值进去,我在这个位置加了个PRINTF语句 能有输出list1.elem[0]
list1.elem[1]=1;
}
int main()
{

SqList list1;
InitList(list1);
printf("%d",list1.elem[0]);
//这个位置不懂,输出的是个很大很大的负数不知道为什么
}

#include <stdio.h>
#include <stdlib.h>
typedef struct SqList //顺序表
{
int *elem; //表头指针(这个指针的用法不大懂/书上算法 把他当数组用在)
int length; //表长
int listsize; //最大长度
};

//此函数目的是要初始化传近来的SqList数据,但是你采用的是
//值传递方法,所以,虽然在本函数中分配了100个空间,但是
//函数返回时,形式参数并没有把分配好的空间和赋予的值
//带回主函数.所以,改为用指针作为参数,以将分配的空间
//和赋予的值带回主函数.
int InitList(SqList * list1)
{
list1->elem=new int[100];
if( !(list1->elem) )
{
exit(1);
}
list1->length=4;
list1->listsize=100;
list1->elem[0]=2;
list1->elem[1]=1;
return list1->length;
}

int main()
{
SqList list1;
InitList(&list1); //对应的,修改此处为传递它的地址
printf("%d",list1.elem[0]);
//这个位置不懂,输出的是个很大很大的负数不知道为什么 :
//是因为:原来是用值传递,函数返回时并没有生成数组,也没有赋予值.

//最后不要忘记释放分配的资源.
delete [] list1.elem;

getchar();
}