目录
1、基础概念和特点
2、结点类型的声明
typedef struct node{
ElemType data;
struct node *next;
}LNode, *LinkList;
注:以下操作均是对有头结点的单链表的操作
3、初始化单链表
Status InitList(LinkList &L)
{
//产生头结点,并使L指向此头结点
L = (LinkList)malloc(sizeof(LNode));
if(!L) //存储分配失败
return ERROR;
L->next = NULL; //指针域为空
return OK;
}
4、销毁单链表
Status DestoryList(LinkList &L)
{
LinkList p;
while(L){
p = L->next;
free(L);
L = p;
}
return OK;
}
5、求单链表长度
int ListLength(LinkList L)
{
int i = 0;
LinkList p = L->next; //p指向第一个结点
while(p){
i++;
p = p->next;
}
return i;
}
6、求单链表中值为e的元素
int LocateElem(LinkList L, int e)
{
LinkList p = L->next;
int i = 0;
while(p){
i++;
if(p->data == e) // 找到了值为e的元素
{
return i;
}
p = p->next;
}
return ERROR;
}
7、单链表的插入
Status ListInsert_L(LinkList &L, int i, ElemType e)
{
LinkList p = L;
int j = 0;
while(p && j < i - 1)//寻找第i-1个结点
{
p = p->next;
j++;
}
if(!p || j > i - 1) //i小于或者大于表长
return ERROR;
LinkList q = (LinkList)malloc(sizeof(LNode)); //生成新的结点
//将新节点插入对应位置
q->data = e;
q->next = p->next;
p->next = q;
}
8、 单链表的删除
Status ListDelete_L(LinkList &L, int i, ElemType &e)
{
LinkList p = L;
int j = 0;
while(p->next && j < i - 1)
{
p = p->next;
j++;
}
if(!(p->next) || j > i - 1)
return ERROR;
LinkList q = p->next;
e = q->data;
p->next = q->next;
free(q);
return OK;
}