C语言链表一步步深入学习

怎么讲链表这部分的吧,主要思路是带着同学们step by step地从无到有实现链表,在逐步改进的过程中体会,而不是直接给大家一个最终完善的代码看。

首先,对于这几种操作,数组是有点麻烦的:删除数组中的一个元素、在数组中插入一个元素、在数组末尾添加一个元素。

因此人们想能否有一个办法,处理上面的问题,实现:–当需要添加一个元素时,会自动添加;–当需要减少一个元素时,会自动放弃该元素原来占有的内存;–可以较方便地插入新的元素。

下面,分步骤实现。

我用的编辑器是Mac上的Xcode。

  1. 定义链表单个节点的数据结构。
#include <stdio.h>

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

void main()
{
	struct node p;
	p.data = 1;
}
  1. 尝试用指针的方式来实现,但下面代码会异常,编辑器不会报错。
#include <stdio.h>

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

void main()
{
	struct node *p;
	(*p).data = 1;
}
  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;
}

  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;
}

转载于:https://my.oschina.net/feanlau/blog/3027910

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值