怎么讲链表这部分的吧,主要思路是带着同学们 step by step 地从无到有实现链表,在逐步改进的过程中体会,而不是直接给大家一个最终完善的代码看。
首先,对于这几种操作,数组是有点麻烦的:删除数组中的一个元素、在数组中插入一个元素、在数组末尾添加一个元素。
因此人们想能否有一个办法,处理上面的问题,实现:–当需要添加一个元素时,会自动添加;–当需要减少一个元素时,会自动放弃该元素原来占有的内存;–可以较方便地插入新的元素。
下面,分步骤实现。
我用的编辑器是 Mac 上的 Xcode。
- 定义链表单个节点的数据结构。
#include <stdio.h>
struct node
{
int data;
node *next;
};
void main()
{
struct node p;
p.data = 1;
}
- 尝试用指针的方式来实现,但下面代码会异常,编辑器不会报错。
#include <stdio.h>
struct node
{
int data;
node *next;
};
void main()
{
struct node *p;
(*p).data = 1;
}
- 改进下,使用指针前需要先分配存储空间
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
node *next;
};
void main()
{
struct node *p;
p=(strcut node *)malloc(sizeof(struct node));
(*p).data = 1;
}
- 实现两个节点的串联,并可以单步跟踪,观察节点在内存中的链接关系。
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
node *next;
};
void main()
{
struct node *p1,*p2;
p1=(struct node *)malloc(sizeof(struct node));
(*p1).data = 1;
p2=(struct node *)malloc(sizeof(struct node));
(*p2).data = 2;
p1->next = p2;
}