链表
是一种动态存储方式,和顺序表相比,链表物理存储上是非连续的,而且采用动态内存开辟,其优点是方便插入,没有上限的存储,不需要内存空间的重组,能有效的分配和利用内存资源,不会造成空间浪费,缺点是排序很麻烦,查找也很麻烦,而且需要多个指针操作,容易出错。
链表的各类操作包括:链表的创建、删除、插入、输出、排序等。
结构体定义
要想学懂链表,必须先学好并灵活运用结构,在链表中,一个个独立的结点就是一个结构体元素,一个结点包括两部分(数据域和指针域),靠指针将他们链接在一起。
typedf struct Node
{
DataType _date;
struct Node *_next;
//存放下一个节点的地址
}Node,*pNode;
链表
创建链表三个重要属性:头指针、头结点、尾结点。
头指针(pHead):指向链表头部的指针,也可以看作是 一个特殊的结点,有指针域和数据域,虽然有数据域但不储存任何数据,也没有任何作用,指针域指向第一个结点数据域;
头结点(pNode):链表的第一个结构体元素,其指针域存放第2个节点的地址;
尾结点(TailNode):链表最后一个结构体元素,数据域存放数据域,指针域一般指向空(NULL)。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<malloc.h>
#include<stdio.h>
#include<Windows.h>
typedef int DataType;
typedef struct Node
{
DataType _data;
struct Node * _pNext;
}*pNode;
//初始化链表
void InitList(pNode* pHead)
{
assert(pHead);
<