C _顺义表的实现_动态分配

3 篇文章 0 订阅

在这里插入图片描述

在这里插入图片描述
重点是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);                        //释放原来的内存空间
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值