个人理解—链表1

        一般的数组存在着以下的问题:1.元素类型一致。2.数组大小固定。所以便有了链表。链表可以理解为,可实时控制大小的一种数组。

        数组拓展:1.搬迁=>可以自己进行实现,c语言默认不支持。2.外扩->基于合理的思路,化整为零的思想,向外开拓新的内存。

        链表:解释为由锁链相接的表,锁链指的是一种链接方式,表示一个个节点用于保存数据。C语言中链接两个内存的方式,无法是使用指针。

        链表的若干个节点,结构相同,节点由有效信息和无效信息两个部分组成。有效信息:用于存储数据的部分。无效信息:用于指向下一个或上一个节点的信息。可见有效和无效是相对使用者而言的。

        链表,就是用于解决数组不能动态拓展的问题,但是数组依然比链表具有优势,因为使用起来更加方便。

        列举一个单向列表:

        

struct node
{
    int data;
    struct node *pnext;
}

        其中data为有效数据,*pnext为指向下一个节点的指针。一般情况下,链表会放在堆上进行存放,因为栈的不好管理,不好释放,且不能使用数据段,数据段在开始时就被分配了。所以链表只能使用堆内存。

int main()
{
    struct node *p0=(struct node*)malloc(sizeof(struct node));
    if(NULL==p0)
    {
        内存申请成功判段
    }
    ...
    bzero(p0,(struct node)); 清理内存,先清理再赋值
}

        节点填充:

p0->data=1;
p0->pnext=NULL;下一个节点暂未被申请

        链表的头指针,只是一个指针,类型为struct node *,占4字节,没有data数据,只是一个用于指向第一个节点的指针。

struct node *pHeader=NULL;
pHeader = p0;

        所以申请第二个节点的方式为:


    struct node *p1=(struct node*)malloc(sizeof(struct node));
    if(NULL==p1)
    {
        内存申请成功判段
    }
    ...
    bzero(p0,(struct node)); 清理内存同memset()
    p1->data=2;
    p1->pnext=NULL;
    P0->pnext=p1;

        后面的节点申请方式同上。

        下一章将对单链表的封装与插入进行说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值