单链表的初试化(构造一个空表)
算法:①生成新结点做结头,用头指针L指向新结点。
②将头结点的指针域置空。
算法描述:
Status InitList(LinkList &L){ //LinkList 指向的是有数据和指针两个变量的结点
L=new LNode; //或 L=(Linklist)malloc(sizeof(LNode)); 从内存中找到这样的空间赋值给L
L->next=NULL;
return Ok;
}
补充算法:判断链表是否为空
int ListEmpty(LinkList L){
if(L-> next)
return 0;
else
return 1;
}
单链表的销毁:
算法思路:从头指针开始,依次释放所有结点
Status DestoryList_L(LinkList &L){ //销毁单链表L
Lnode *p; // 或LinkList p;
while(L){
p=L;
L=L->next;
delete p;
}
单链表的清空
算法:链表存在,但是链表中没有元素,成为空链表(头指针和头结点仍然存在)。释放所有结点,并将头结点指针域设置为空
Status ClearList(LinkList &L){ //将L重置为空表
Lnode *p,*q; //或LinkList p,q;
p=L-> next; //从首元结点开始,P最初指向头结点的下一个结点,即首元结点
while(p){
q=p->next; //q用来指向p的下一个结点
delete p;
p=q;
}
L->next=NULL; //头结点的指针域为空
return OK;
}
求单链表的的表长
算法:从首元结点开始,依次计数所有结点
int ListLength_L(LinkList L){
LinkList p; /定义指针变量P
p=L-> next; //p指针指向头结点
i=0;
while(p){
i++; ///遍历单链表,统计结点数
p=p-> next;
}
知识回顾
①LNode 同类型的结点,指向结点的指针用LNode定义
② *LinkList 指向该结点的指针
取值:取单链表中第i个元素
算法:
//LinkList L表示从表L中获取,ElemType &e : 表示将获取的元素通过e返回
Status GetElem_L(LinkList L, int i, ElemType &e){
P=L->next; //指针指向首元结点
j=1; //初试化
while( p && j<i){ //当前指针变量存在,且j没有超过L中元素
p=p-> next;
++j;
}
if( !p || j<i) return ERROR;// 指针为空,第i个元素不存在
e=p->data;
return OK;
}
查找:根据指定数据获取该数据所在的地址
算法: