重点是IncreaseSize(SeqList &L, int len)这个函数。
把已有元素的数组赋值给新建的int *p。然后自己再从新开辟15个新的int型空间。
这时候L.data是为没有元素的。然后再循环遍历把旧的元素给赋值过来。还剩下给新的元素留下的空间地址。这样就实现了动态分配了。
<-------------------------------------------------------------------------------------------------------------------->
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#define InitSize 10 //默认的最大长度
typedef struct{
int *data; //指针动态分配数组的指针
int MaxSize; //顺序表的最大容量
int length; //顺序表的当前长度
}SeqList;
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = 0);
~Dialog();
public slots:
InitList(SeqList &L);
IncreaseSize(SeqList &L, int len);
};
#endif // DIALOG_H
#include "dialog.h"
#include <stdlib.h>
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
SeqList L; //声明一个顺序表
InitList(L); //初始化顺序表
//、、、往顺序表中随便插入几个元素
IncreaseSize(L, 5);
}
Dialog::~Dialog()
{
}
Dialog::InitList(SeqList &L)
{
//用malloc 函数申请一片连续的存储空间
L.data = (int *)malloc(InitSize*sizeof(int));
L.length = 0;
L.MaxSize = InitSize;
}
Dialog::IncreaseSize(SeqList &L, int len)
{
int *p = L.data;
L.data = (int *)malloc((L.MaxSize)*sizeof(int));
for (int i=0; i<L.length; i++)
{
L.data[i] = p[i]; //将数字复制到新区域
}
L.MaxSize = L.MaxSize+len; //顺序表最大的长度增加 len
free(p); //释放原来的内存空间
}