链表的概念这里就不细说了,我们直接来看基于链表的基本操作。
这里介绍一种比较常用的链表->带头结点的单向链表。
包括链表的创建、打印、增、删、改、查。
一般建立链表时,需要几个结点我们就创建几个,但如果在我们实际需要的结点最前面再加一个首结点(假的首结点),这样在之后的操作中就会方便很多。
#include <iostream>
using namespace std;
#define OPERAEALL 1 //操作所有
#define OPERAEONE 0 //操作一次
typedef int custom; //结点数据域类型
//链表结点
typedef struct listnode
{
custom elem; //数据域
struct listnode *next; //指向下一个结点
} NODE;
//链表头结点
typedef struct listhead
{
int number; //有效结点数量
NODE *first; //指向第一个有效结点
NODE *last; //指向最后一个有效结点
} HEAD;
HEAD * create_head_node(); //创建头节点
bool printf_list(HEAD *htr); //打印一个链表
HEAD * add_node(HEAD *htr); //增加结点
HEAD * delete_node(HEAD *htr); //删除结点
HEAD * modifly_node(HEAD *htr); //修改结点
HEAD * find_node(HEAD *htr); //查找结点
int main()
{
return 0;
}
HEAD * create_head_node()
{
HEAD *htr = new HEAD;
NODE *ntr = new NODE; //为了方便之后的操作,创建头结点的时候,就让他指向一个无效链表结点,这个结点的数据域是无效的
//它是指向链表真正的第一个结点的结点。
htr->first = ntr;
htr->last = ntr;
htr->number = 0; //指向的是无效结点,所以有效结点数还是0<