单链表的基本操作

时间:2024-10-05 14:04:28
一、 单链表的初始化(带头结点)

     算法步骤:

  1. 生成新结点作头结点,用头指针L指向头结点。
  2. 将头结点的指针域置空。
typedef struct Lnode{
     ElemType data;
      struct Lnode *next;
}LNode,*LinkList;

Status InitList_L(LinkList &L){
    L = new LNode;   //或L = (LinkList)malloc(sizeof(LNode));
    L->next = NULL;
    return OK;
}
二、 判断链表是否为空

算法步骤:

  1. 判断头结点指针域是否为空
int LinkEmpty(LinkList L){   //若为空表,返回1,否则返回0
   if(L->next)
      return 0;
   else 
      return 1;
}
三、 单链表的销毁(链表销毁后不存在)

算法步骤:

  1. 从头指针开始,依次释放所有结点
Status DestroyList_L(LinkList &L){
     Lnode *p; //或LinkList p;
     while(L){
        p = L;
        L = L->next;
        delete p;
}
 四、 清空链表--链表仍然存在,但链表中没有元素

算法步骤:

  1. 依次释放所有结点,并将头结点指针域设置为空
Status ClearList(LinkList &L){
    Lnode *p,*q;   //或LinkList p,q;
    p=L->next;
    while(p){
       q=p->next;
       delete p;
       p=q;
    }
    L->next==NULL;
    return OK;
}
五、 求单链表的表长

算法思路: 

  1. 从首元结点开始,依次计数所有结点
int ListLength_L(LinkList &L){
  LinkList p;  //Lnode *p;
  p=L->next;   //p指向第一个结点
  i=0;
  while(P){
      i++;    //遍历单链表,统计结点数
      p=p->next;
  }
  return i;
}