超详细!对于链表的理解 (入门)(c++11)

本文通过解决洛谷的一道入门级题目,详细介绍了如何使用链表进行问题求解。从代码实现到链表原理,深入浅出地解释了链表的构造和遍历过程,以及在内存分配上的优势。

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

关于链表的理解

今天没事嫖了下洛谷,让后打开了新手区寻求快感,做这道题花了一个多小时,半个小时都在检查,原来用的是容器(因为自动分配内存所以我经常用)然后出现了不可描述的错误和栈溢出,下午看数学的时候我想起了乐爷爷教的链表。下面是那道原题。
洛谷入门题地址
废话不多说,直接上代码

#include <iostream>
using namespace std;
struct square{	//定义结构,把他看作一个默认公有成员的类
    int a , b , c,d ;
    square*next=nullptr; //在该结构中定义下一个结构(因为后面想用动态分配
    					//所以用了指针)
    square(int&ad,int&bd,int&cd,int&dd,square*next1)//定义了构造函数
    {
        a=ad;b=bd;c=cd;d=dd;
        next=next1;
    }
};
int main()
{
    int e, f, g,h,n,x,y;
    square *test =nullptr;//使用nullptr相当于初始化指针//c++11
    cin>>n;
    for(int i = 0 ; i<n;i++)
    {
       cin>>e>>f>>g>>h;
       test = new square(e,f,g,h,test) ;//层层递进赋值
    }
    cin>>x>>y;
    for(int i = 0 ; i < n ; i++)
    {
        if(test->a<=x&&test->a+test->c>=x&&test->b<=y&&test->b+test->d>=y){
            int aa= n-i;
            cout<<aa<<endl;
            break;}
        test=test->next;
    }//层层退出查找
    if(test==nullptr)//查找不到时的处理
    cout<<-1<<endl;
    delete test ;//遍历释放把,我太懒了
    return 0;
}

总结
我个人的理解是,struct结构里面定义了下一个struct结构,在使用时可以不用定义默认构造函数而是给他的下一位取名字,如果经常要用到某个特定元素的话。
使用到复杂的构造或者成员函数时就是真正意义上的链表,因为struct结构每次定义时会赋给一个新的存储块,而这个存储块里面包含上一个存储块的地址,层层递进,所以叫做链表,一般的形象化理解是下一个的尾部接上一个的头部一串串连起来,访问时只能通过递归按次序访问每个元素。
昨天看了共同体union的详解后我才意识到关于内存分配了这一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值