概念
链式存储:结点在存储器中的位置是任意的,即逻辑相邻的数据元素在物理上不一定相邻
链式存储结构也称非顺序映像或链式映像
图解
链式存储结构中结点一般有两个部分组成,即数据域(data)和指针域,数据域是用于存放数据的,指针域是用来指向下一结点的地址的,其中头节点指向该链表的首元结点,表示该链表从这开始,尾结点的指针域是空的(NULL),当遇到空的指针域表示该链表到这个结点就已结束。

C语言实现
#include<stdio.h>
#include<stdlib.h>
//定义链表结构体
typedef struct link{
	int data;
	struct link* next;
}Link;
//初始化链表(生成长度4的链表并存放1,2,3,4)
Link* initLink() {
	Link* head = NULL;		//创建头指针
	Link* a = (Link*)malloc(sizeof(Link));		//开辟一块内存空间给头结点
	a->data = NULL;
	a->next = NULL;
	head = a;		//头指针指向头结点
	for (int i = 1; i < 5; i++) {				//循环创建链表
		Link* n = (Link*)malloc(sizeof(Link));	//开辟新内存空间给结点
		n->data = i;
		n->next = NULL;
		a->next = n;			//将结点的next指向下一结点
		a = a->next;			
	}
	return head;		//返回链表首地址
}
//向链表中插入数据
void insertData(Link* p, int num, int data) {
	Link* temp = p;
	for (int i = 1; i < num; i++) {		//判断插入的位置是否有效
		temp = temp->next;
		if (temp == NULL) {
			printf("插入位置无效\n");
			return;
		}
	}
	Link* n = (Link*)malloc(sizeof(Link));		//创建新结点
	n->data = data;		//新结点的数据域赋值
	n->next = temp->next;		//新结点的指针域指向下一结点的地址
	temp->next = n;			//上一结点的指针域指向新结点
}
//向链表中删除数据
int delData(Link* p, int data) {
	Link* temp = p;
	Link* del = NULL;
	int flag = 0;
	while (temp->next) {
		if (temp->next->data == data) {
			flag = 1;
			break;
		}
		temp = temp->next;
	}
	if (flag == 0) {
		return -1;
	}else {
		del = temp->next;
		temp->next = temp->next->next;
		free(del);
		return 1;
	}
}
//打印链表元素
void displayLink(Link* p) {
	p = p->next;
	while (p) {
		printf("%d ", p->data);
		p = p->next;
	}
	printf("\n");
}
int main() {
	Link *p = initLink();
	printf("初始化链表为:");
	displayLink(p);
	printf("插入元素后的链表为:");
	insertData(p, 4, 6);	//在链表中的第二个位置插入一个6
	displayLink(p);
	printf("删除元素后的链表为:");
	delData(p, 6);	//删除链表中数据域为2的结点
	displayLink(p);
}  
由于作者水平有限,如有错误请广大读者批评指正!



















