顺序表和链表的清空,销毁,构造函数

本文详细解析了数据结构中顺序表和链表的构造函数原理及空表、销毁的操作方法,对比了两者在空间分配与初始化上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.构造函数

在定义对象时调用构造函数,构造函数是用来建立一个空表

1.顺序表构造函数

len,size,elem,这仨合起来看作是表的头目,调用构造函数首先为这个“头目”这仨数据分配空间,表的元素有没有空间分配要看m的值。
↓主要是关于空间的分配问题↓
①构造函数是来建立一个空表,令len=0,就说明没有数据元素这就是一个空表了。至于有没有空间,也就是size是多少与空表没有关系,所以m==0||m!=0都可以:
if(m==0)elem=NULL;
else elem=new ElemType[m]
②构造函数给顺序表类的数据元素分配存储空间,所以len,size,elem都有了存储空间,至于剩下的表的空间看m是否等于零来确定是否分配空间,除了构造函数以外,其他的基本操作都建立在了非空表的基础上。在应用里会用插入函数等等来构建非空表。


2.链表的构造函数


head,tail,len这仨是表的头目,也是一样的构造函数建立一个空表,先给这仨分配存储空间
①调用构造函数给len,head,tail,和头结点分配空间
链表有:头指针,头结点→【首元结点,尾节】←有了最后两个就一定不是空表了,建立链表的空表就只是建立一个头结点;new ListNode
②head,tail,len 的值
要建立一个空表首先len=0;head是头指针指向头结点,所以head=new ListNode;至于tail,首先,必须要给它赋值,但是如果有了尾节点,就不是一个空表了所以tail=head,让它也指向头结点;这样最后一个元素还是头结点,就说明只有头结点了,就是一个空表

比较总结:

1.分配空间:
顺序表:len,size,elem,分配空间,其他看m的大小决定是否分配空间。
链表:len,head,tail,头结点分配空间。
2.赋的值:
顺序表:len=0(空表),size=m,→if(m==0)elem=NULL;eles elem=new Elemtype[m]。
链表:len=(空表),head=tail=ListNode。

二.空表

1相同点:
顺序表和链表的构造函数都是建立一个空表,都是len=0
2.不同点:
①顺序表:确定只有(这个有是指空间)”头目”的空间,其他空间看m的大小决定
(并不是清除元素而是使其无法操作,因为没有办法清除元素)1→1/2
②链表:确定有l头目和头结点的空间。
(也是让其无法操作,但是这个可以清除元素就挨个清除了)1→1
3代码实现:
顺序表:len=0;elem=NULL(其实只要len=0就行了,elem是附带的这样更加让其无法操作了)
链表:while(p)
{delete p;}
tail=head;
len=0;

三.销毁

都是只留下了头目的空间

1.顺序表:detele elem[ ]:elem=NULL;
去除掉出头目外所有的空间(就类似于构造函数时m==0的情况)
2. 链表:先清空表,再去掉头结点;也就是只剩下了头目
(链表和顺序表的销毁都是只剩下了头目)

使用c++实现的顺序表:多文件编程,层次清晰,函数有注释 SeqList();//构造函数,存储的元素个数设为0 bool setLength(size_t length);//设置已经存储的元素个数 bool addElement(ElemType element);//把某个元素添加到顺序表末尾 bool addElement(ElemType element , size_t n);//插入一个元素,使其成为第n个元素,其余元素后移 bool delElement();//删除所有的元素 bool delElement(size_t n);//删除第n个元素 bool delElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,把这个元素删除 bool replaceElement(ElemType element , size_t n);//使用一个元素,替换掉第n个元素 bool swapElement(size_t n1 , size_t n2);//把第n1个元素第n2个元素交换 ElemType* getElement();//得到数组头的指针 ElemType* getElement(size_t n);//得到第n个元素的指针 size_t getLength();//得到存储的元素个数 size_t getMaxSize();//得到顺序表容量 bool showElementDetail();//输出所有的元素细节 bool showElementDetail(size_t n);//输出第n个元素的细节 bool showElementDetail(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,输出元素所有细节 size_t findElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素位置 static int inputAInt(int min = 0,int max = 9,int defaultValue = -1);//从键盘读取,限制为一个min到max间的整数,非法情况返回defaultValue void startControlLoop();//打开控制界面 ~SeqList();//析构函数
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值