昨天上课讲到了顺序表的结构体在构造时候可以应用指针做数据成员,而不需要定义一个数组,那么具体方法是这样的:
typedef struct{ int *data; int length; }SqList;
这种方式构造顺序表,data项不用数组,这样可以动态生成,不浪费空间,但是data是个指针,怎么表示多个连续的数据呢,所以他的CreateSqlist写法是
void CreateSqList(SqList &L) { int i,node,n; cin>>n; L.data=new int[n];//动态申请分配n个int内存空间 for(i=0;i<n;i++) { cin>>node; L.data[i]=node; //可以用下标法表示元素。 } L.length=n; }
顺序表L中data申请内存空间可以用new方法动态申请n个连续的int空间内存,这样后面表示data中某个数据元素,也可以用下标法表示,就是:
L.data[i]
再看看main方法:
int main() { SqList L; //不需要定义指针类型,操作更方便。 CreateSqList(L) ; DispSqList(L); }
和课本的顺序表方法定义,我们比较下:
typedef struct{ int data[MAXSIZE]; //数组开始明确指定元素个数,会浪费空间 int length; }SqList; void CreateSqList(SqList *&L) { int i,node,n; L=(SqList *)malloc(sizeof (SqList)); cin>>n; for(i=0;i<n;i++) { cin>>node; L->data[i]=node; } L->length=n; } int main() { SqList *L; CreateSqList(L) ; DispSqList(L); }