一、定义:
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
二、链表的组成
链表有两部分组成 1. 数据域 2.指针域
一般的在头部都会有一个指针指向头部 表示链表的开头(这里用head表示)
一般的在尾部都会有一个NULL代表链表的结束
三、代码实现
(1)、创建一个链表结构:
typedef struct link{ int x; struct link *nect; }link;
在这里 typedef 表示将结构改名为 link
在其结构里 有两个成员 表示的就是 数据域和指针域 (分别是 x 和 nect 指针)
(2)、初始化链表 :
void chushihua(struct link* link1){ link1->nect=NULL; head=NULL; }
链表在刚开始时没有任何节点因此haed=NULL nect也只能指向NULL
(3)、插入元素(头插法):
#include<bits/stdc++.h>
using namespace std;
typedef struct link{
int x;
struct link *nect;
}link;
struct link *head;
void chushihua(struct link* link1){
link1->nect=NULL;
}
void insterlink(struct link *link1,int a){
struct link *temp = (link*)malloc(sizeof(struct link)); //创建一个新的容器用来存插入的数
temp->x=a;
temp->nect = head;
head = temp;
}
void printflink(){
struct link* temp=head;
while(temp!=NULL)
{
printf("%d ",temp->x);
temp=temp->nect;
}
}
int main(){
link link1;
head=NULL;
chushihua(&link1);
insterlink(&link1,1);// 1
insterlink(&link1,2);// 2 1
insterlink(&link1,3);// 3 2 1
printflink();
}
根据图可以知道大致原理 因为head永远指向第一个因此需要考虑到temp->nuLL 直接:
temp->nect = head;
head = temp;便可