怎样学习C语言中的链表,有没有什么好的文章博客,详细易懂,发一下链接,谢谢
链表就是两个域,数据域放数据,指针域放下一个节点的地址,数据结构书上的代码就很清晰明了啊;
http://www.cnblogs.com/wwang/archive/2010/11/28/1889281.html
关于链表的学习,我大一的时候也很困惑。特别是当你看着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;
}
希望能帮到你!
你应该先明白要做什么,以及你都能做什么,然后才是怎么做,这才是水到渠成的事情。
就像一本菜谱,首先向你展示的是食物做成的照片,然后才是原材料和制作方法。
之所以你遇到学习瓶颈,原因是你那根本不是学习,而是应付学习,所以你对于做什么,为什么要做毫不关心,对于欠缺的基础知识也不想踏踏实实地学。
你只是幻想结果而已。
不要过度的拘泥于那些数据结构,本质都是对结构体的操作
首先,这一点你得理解:从人类语言和思维的角度,理解链表。这一点会了,就没有问题了。如果有问题,就是C语言语法不熟练,就像我虽然懂英语,可是真的和老外交流起来就吃力了。
也许是对指针不熟悉导致,网上找视频教程看看,不懂的多问,如果还在学校的话,多和同学老师交流,把本质的东西掌握了,什么都很顺其自然的懂了
这个我也有点看不懂了