链表的创建和遍历
一:链表是什么
链表是多个不连续的内存空间去存储数据的
二:链表是如何进行创建,遍历,插入的
1、我们在写代码的时候都会用到头文件,也就是我们的库函数(以下是我所写的库函数,仅供参考)
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#include<Windows.h>
2、链表是由结点组成的,结点又分成了数据域和指针域,显而易见,数据域是存储数据的,指针域是存放指针的,所以在这里我们就需要用到结构体,结构体的定义如下所示:
typedef struct Node{
int data;
struct Node *next;
}Node , *LinkList ;
3、首先我们需要创建一个头结点,并为头结点动态申请空间,头结点的数据域是没有数据的,指针域为NULL
int main(){
LinkList head=(Node *)malloc(sizeof(Node));
head->next=NULL;
4、接下来我们创建链表,在这里我调用了子函数创建函数(create),需要用到头结点,所以在这里我把头结点当成参数传递给了create,首先需要判断头结点是否为空,不为空则往下面走,我用到了键盘录入(5个数据),我们学到的插入数据有头插法还有尾插法,我这里运用到了链表的头插法
//创建链表
int create(LinkList head){
//判断头结点是否为空
if(head==NULL){
printf("空间申请失败!");
return 0;
}
int i;
for(i=0;i<5;i++){
LinkList p=(Node *)malloc(sizeof(Node));
printf("请输入第%d个数据:",(i+1));
scanf("%d",p->data);
p->next=NULL;
p->next=head->next;
head->next=p;
}
}
4.1 利用尾插法,运行的结果如下:
5、创建链表并输入数据之后,我们需要遍历链表,我调用了print函数来遍历链表,首先还是判断头结点是否为空,在这里我们需要定义一个指针p来指向head的指针域,判断当p不为空时,即遍历链表
int print(LinkList head){
//判断头结点是否为空,为空即终止函数
if(head==NULL){
return 0;
}
LinkList p=head->next;
//当p不为空时,遍历链表
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
}
6、我们可以对链表进行操作,比如我们还可以利用头插法来插入一个数据,首先需要创建一个要插入的数据的指针,然后动态申请空间,插入链表中
//插入数据
int charu(LinkList head){
LinkList p=head;
LinkList q=(Node *)malloc(sizeof(Node));
printf("请输入你要插入的数据:");
scanf("%d",&q->data);
q->next=p->next;
p->next=q;
6.1插入数据之后,运行的结果如下: