链表
前言
在存储一大波数的时候,尝使用的是数组,但有时候数组显得不够灵活,比如要在排好序的数组中插入一个数仍符合排序
不用链表:
使用链表:
结点:每一个结点由两部分构成。左边的部分用来存放具体的数值,右边的部分需要存储下一个结点的地址。
定义一个结构体类型来存储这个结点:
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也指向当前结点