为什么使用链表
我们在储存一大堆数的时候经常使用数组,可是数组有时候会不太灵活如:
有一列已经从小到大排好序的数字2 3 5 8 9 10 12.现在要插入6使得仍然是从小到大排列.
用数组则我们需要把8及其后面所有数字向后挪一位如下图一部分.
那么什么是链表呢?如下图二部分.三部分是链表中插入数的实现方法.
在C语言中用指针和动态内存分配函数malloc来实现.
链表由很多结点构成,而每一个结点都由俩部分构成,左边的部分用来存储数值,右边的存储下一个结点的地址
创造一个链表
代码实现
#include<stdio.h>
#include<stdlib.h>//调用malloc函数用的头文件
struct ch
{
int date ;
struct ch *next;//因为下一个结点类型也是struct ch所以指针类型也是这个
};//创造一个结构类型来表示结点
int main()
{
struct ch *head,*p,*q,*t;//p,q临时指针用来输入创造链表,t用来输出,head头指针,指向链表的第一个结点
int i,n,a;//i,n用来循环输入,a用来暂时储存输入的数字
scanf("%d",&n);
head=NULL;//将头函数初始为空
for(i=0;i<n;i++){
scanf("%d",&a);
p=(struct ch*)malloc(sizeof(struct ch));//将malloc类型强制转换并将p指向动态分配的内存空间地址
p->date=a;
p->next=NULL;//给这个结点赋值并将结点的指针部分初始为空
if(head==NULL){
head=p;//如果这是第一个结点就让头指针指向他
}else{
q->next=p;
}//如果不是就让上一个结点的指针指向他
q=p;
}//循环n次创造一个n个结点的链表
t=head;
while(t!=NULL){
printf("%d ",t->date);
t=t->next;
}
return 0;
}