当前位置:C++技术网 > 资讯 > 链表其实就这么回事!

链表其实就这么回事!

更新时间:2015-06-27 18:55:39浏览次数:1+次

    我是真的啥也不会,没啥可写的。而且这个我也不是很懂。前几天在培训班听课,观摩同学的一小段代码顿时明白了一点。凑合看吧......

    数组,我们都知道,也都会用。我写一个int a[10];

    []大概是索引的意思吧。就是说,这个数组的内存是物理上连续的。使用起来极其方便,但是有俩主要毛病。第一,万一数组的每个元素占空间很大,我们也许找不到那么大连续的物理空间存他。而且也比较不容易去动态的增减它的元素数目。所以滋生了链表这个有着诸多优点但是使用更加麻烦的东西。我认为这就是一个大数组。

struct CLianBiao
 {
    int nKey;
    CLianBiao *nextLB = 0;
 };

    ↑ 这玩意就是链表的节点了。


    咋赋值呢?我们其实可以手动的一个个的给 nextLB 赋值。事实上也就是这么赋值的。

CLianBiao *head = new CLianBiao;
 CLianBiao *p1 = new CLianBiao;
 CLianBiao *buf = 0;
 head->nKey = 0;
 head->nextLB = p1;
 int i = 0;
 for (int i = 0; i < 10; ++i)
 {
    buf = new CLianBiao;
     buf->nKey = i + 1;
     p1->nextLB = buf;
     p1 = buf;
 }

    看for循环。我们为毛可以这么玩?因为在C++中,指针的名字扔了,但是new出来的那块内存还占着(没释放)。

    给 buf 分配一块内存。

    第二句是给该节点一个编号。

    第三句把 “buf 的地址”给 “p1 的 next 指针”

    第四句把 buf 的地址给 p1 。这句的意思是扔掉 p1原来的指向,但是保留 p1 原来指向的内存。说白了就是这一次 for 之后,p1 里边的地址变了,但是之前 p1 里边地址指向的那块内存空间还留着,并且“那块内存空间“里的 next 指针里的地址,是现在 buf 的地址。(我擦咧,这句话打了20分钟。我终于知道链表为啥那么难学了,这话真 TM 不好说。)

    增删查改不说了,其实我也没写。就只写了个获得其节点。

CLianBiao *a;
 CLianBiao *b;
 a = head;
 while (1)
{
     b = a->nextLB;
    a = b;
    if (a->nKey == 9)
        break;
 }

    一样的原理。扔名字,留内存。

    这指针不用释放,因为根本就没 new 。倒腾来倒腾去就是在通过每块内存的 next 找下一个地址。