一、单链表的初始化
算法思想:创建一个新结点,用L指向这个结点作为头结点,再将头结点的指针域置为空。
Status InitList_L( LinkList &L)
{
L = (LinkList) malloc (sizeof(Lnode)); //开辟一个新结点
L -> next = NULL;
return OK;
}
这里用到了malloc函数,是关于C语言动态内存分配这块儿的,有兴趣可以看之前的文章:C语言——动态内存分配_慢慢~漫漫的博客-CSDN博客。
二、判断链表是否为空
int LinkEmpty( LinkList L )
{
if( L -> next )
return 1;
else
return 0;
}
如果为空则返回1,否则返回0,这个还是比较简单的。
三、单链表的销毁
算法思想:建立一个指针p,使得p指向头结点L,让L向后移动,并将p释放,依次进行,知道L==NULL。
算法实现:
Status DestoryList_L( LinkList &L)
{
Londe *p;
while(L)
{
p = L;
L = L -> next;
free(p);
}
}
四、单链表的清空
算法思想:建立两个指针p,q;让p指向第一个节点,也就是头结点L的后继节点,然让q指向p的后继节点,并且释放掉p;循环重复此操作,直到p指向NULL。
算法实现:
Status ClearList_L( LinkList L )
{
Lnode *p,*q;
p = L -> next;
while(p)
{
q = p -> next;
free(p);
p = q;
}
}
五、求链表的表长
算法思想:开设一个指针p,从头结点的后继节点开始,向后移动,同时计数器i不断增加,直到p为NULL,跳出循环,返回i。
int LinstLength_L( LinkList L )
{
Lnode *p;
int i = 0;
p = L -> next; //头结点是不计入长度的,所以要从头结点的后继节点算起
while(p)
{
i++;
p = p -> next;
}
return i;
}
六、取单链表当中的第i个元素
算法实现:在链表L中取第i个元素,把它的数据域放入e中并返回(两个逗号,三个参数;两逗三参)。
Status GetElem_L( LinkList L , int i , ElemType e)
{
Lnode *p;
p = L -> next;
int j =1;
while(p && j < i)
{
p = p -> next;
++j;
}
if( (!p) && (j > i) )
return ERROR;
else
e = p -> data;
return Ok;
}