三种链表的定义和基本操作
单链表
不可随机存取
定义及初始化 判空
注意:
LNode 是强调返回的是一个结点
LinkList 是强调返回的是一个链表
不带头节点的单链表
头指针L指向的是实际的元素结点,即指向实际的值
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
//初始化
bool InitList(LinkList &L) //注意这里L前面要加&,因为值需要带回
{
L = NULL;
return true;
}
//判空
bool Empty(LinkList L) //此处L前不用&
{
return (L==NULL);
}
带头结点的单链表
初始化
- 分配一个结点,类型是LNode,称为头结点,头指针指向头结点
- 判断分配是否成功
- 头结点后无结点
//带头结点初始化
bool InitList(LinkList &L)
{
L = (LNode *)malloc(sizeof(LNode)); //分配一个头结点
if(L==NULL) return false; //内存不足,分配失败
L->next = NULL;
return ture;
}
//判空
bool Empty(LinkList L)
{
return (L->next ==NULL);
}
查找
按位查找GetElem(L,i)
找到第i个结点
- 判断i是否合法
- 定义一个指针p(指向扫描到的结点
- 定义 j 为指向结点的位置
- 让p先指向头结点
- 用while循环,实现p向后移直到找到i位置结点
//带头结点
bool GetElem(LinkList L, int i)
{
if(i<1) return false;
LNode *p