单链表的定义、增删改查、建立
一、单链表的定义初始化
单链表分为不带头结点的单链表和带头结点的单链表
1.1不带头结点的单链表
声明一个不带头结点的单链表,&符号表示引用,InitList函数中将L赋值为NULL,防止脏数据,表示空表。
#include <stdlib.h>
#include <stdio.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode, *LinkList;
bool InitList(LinkList &L){
L = NULL; //空表,暂时没有任何节点
return true;
}
1.2带头结点的单链表
带头结点的单链表声明在InitList函数中使用malloc函数创建头结点,
malloc函数语法:
typedef struct LNode{
int data;
struct LNode *next;
}LNode, *LinkList;
LNode *p=(LNode *)malloc(sizeof(LNode));
free(p)
带头结点的单链表:
typedef struct LNode{
int data;
struct LNode *next;
}LNode, *LinkList;
bool InitList(LinkList &L){
L = (LNode *)malloc(sizeof(LNode)); //分配一个头结点
if (L==NULL) //空表,暂时没有任何节点
return false;
L->next=NULL; //头结点后还没有节点
return true;
}
带头结点的单链表使用更方便
二、单链表的插入
2.1按位序插入(带头结点)
ListInsert插入操作,在第i个位序上插入指定元素e,时间复杂度O(n)。
一般使用带头结点的位序插入。
#include <stdlib.h>
#include <stdio.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode, *LinkList;
bool InitList(LinkList &L){
L = (LNode *)malloc(sizeof(LNode));
if (L==NULL) //空表,暂时没有任何节点
return false;
L->next=NULL; //头结点后还没有节点
return true;
}
bool InsertList(LinkList &L,int i,