算法第二章第4节:链表

链表

前言

在存储一大波数的时候,尝使用的是数组,但有时候数组显得不够灵活,比如要在排好序的数组中插入一个数仍符合排序

不用链表:在这里插入图片描述
使用链表:在这里插入图片描述
结点:每一个结点由两部分构成。左边的部分用来存放具体的数值,右边的部分需要存储下一个结点的地址。
定义一个结构体类型来存储这个结点:
struct node
{
 int data;
 struct node *next;
};

建立链表:

1.定义一个头指针head 指向链表的最开始。当链表还没有建立的时候头指针head为空(指向空结点)
struct node *head;
head=NULL;     //头指针初始为空,头指针作用是方便以后从头遍历整个链表

2.建立第一个结点,用临时指针p指向这个结点
struct node *p;
p=(struct node *)malloc(sizeof(struct node));

3.设置新创建的这个结点的左半部分和右半部分
scanf("%d",&a);
p->data=a;     //将数据存储到当前结点的data域中
p->next=NULL;    //设置当前结点的后继指针指向空
注意:->叫做结构体指针运算符,用来访问结构体内部成员,p是一个指针,不能用 . 号访问内部成员

4.设置头指针并设置新创建结点的*next指向空
if(head==NULL)
head=p;//如果这是第一个创建的结点,则将头指针指向这个结点
else
q->next=p;//如果不是第一个创建的结点,则将上一个结点的后继指针指向当前结点
在这里插入图片描述5.将指针q也指向当前结点,因为之后临时指针p要指向新创建的结点
q=p;//指针q也指向当前结点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值