2 qq 23845475 qq_23845475 于 2014.12.16 20:20 提问

关于C语言链表学习入门遇到瓶颈

怎样学习C语言中的链表,有没有什么好的文章博客,详细易懂,发一下链接,谢谢

7个回答

u011767611
u011767611   2014.12.16 20:54

关于链表的学习,我大一的时候也很困惑。特别是当你看着ADT所谓的(抽象数据类型)时。
后来我看了一本有源代码的书,结合代码猜发现也不过如此,很简单的。
第一,你必须意识到为什么有数组啦,我还要链表呢?这个问题你想想。
然后给你个例子,过年回家啦!火车上的座位明显不够啦!这时候火车尾部就会加一节,不行加两节。。。
总之加到,火车头拉不动为止(当然这是玩笑)
而如果是数组的话,你就不能这样啦!就像做飞机回家,747就是拉那么多人,多一个也不拉。
满啦你就坐下一航班。。。。。。纯属我自己编的,只是希望你理解。
第二,你需要充分理解指针以及使用malloc动态分配内存。。(所谓动态,就像,多拉几个车厢,你尽管向上级申请)
最后给你代码,希望你好好分析。。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define err_exit(msg) (perror(msg),(exit(1)))
typedef struct node * link;
static link head=NULL;
int i=0;
struct node {
    unsigned char data;
    int count;
    link next;
};
link make_node(unsigned char data)
{
    link p;
    p=(link)malloc(sizeof(link));
    p->data=data;
    p->count=0;
    p->next=NULL;
    return p;
}
void free_node (link p)
{
    free(p);
}
link search(unsigned char data)
{
    link p;
    //int i=0;
    for(p=head;p;p=p->next){
        //p->count=i;
        if(p->data==data)
        {
            //p->count=i;
            printf("I find it at the pos[%d]\n",p->count);
            return p;
        }
    }
}
/*pre insert*/
void insert(link p)
{
    p->next=head;
    head=p;
    ++i;
    p->count=i;
}
void delete(link p)
{
    link pre;
    if(p==head){
        /*'cause' p going to be ignoe or 'delete'
         *turn the head to p->next point
         */
         head=p->next;
         return ;
    }
    for(pre=head;pre;pre=pre->next)
        if(pre->next==p){
            pre->next=p->next;
            return ;
        }
}
int main(void)
{
    link p;
    p=make_node('a');
    insert(p);
    p=make_node('2');
    insert(p);
    p=make_node('1');
    insert(p);
    p=make_node('b');
    insert(p);
    search('b');
    return 0;
}

希望能帮到你!

u011767611
u011767611 不客气!
2 年多之前 回复
YXTS122
YXTS122 这分享对我太有帮助了,谢谢!
2 年多之前 回复
wangyaninglm
wangyaninglm   Ds   Rxr 2014.12.16 20:53

链表就是两个域,数据域放数据,指针域放下一个节点的地址,数据结构书上的代码就很清晰明了啊;

http://www.cnblogs.com/wwang/archive/2010/11/28/1889281.html

caozhy
caozhy   Ds   Rxr 2014.12.16 21:49

你应该先明白要做什么,以及你都能做什么,然后才是怎么做,这才是水到渠成的事情。

就像一本菜谱,首先向你展示的是食物做成的照片,然后才是原材料和制作方法。

之所以你遇到学习瓶颈,原因是你那根本不是学习,而是应付学习,所以你对于做什么,为什么要做毫不关心,对于欠缺的基础知识也不想踏踏实实地学。

你只是幻想结果而已。

qwe1398775315
qwe1398775315   2014.12.16 23:22

不要过度的拘泥于那些数据结构,本质都是对结构体的操作

u012256042
u012256042   2014.12.17 14:47

首先,这一点你得理解:从人类语言和思维的角度,理解链表。这一点会了,就没有问题了。如果有问题,就是C语言语法不熟练,就像我虽然懂英语,可是真的和老外交流起来就吃力了。

hxh88888888
hxh88888888   2015.01.07 16:05

也许是对指针不熟悉导致,网上找视频教程看看,不懂的多问,如果还在学校的话,多和同学老师交流,把本质的东西掌握了,什么都很顺其自然的懂了

drinkingto2013
drinkingto2013   2015.01.11 15:19

这个我也有点看不懂了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!