数据结构之单链表的定义实现和基本操作

本文介绍了单链表的存储结构,包括定义链表节点和指针类型。详细阐述了如何初始化带头结点的单链表、判断链表是否为空、销毁链表、清空链表以及计算链表长度等基本操作的C语言实现。这些是数据结构和算法中的基础概念。
摘要由CSDN通过智能技术生成

单链表的存储结构

typedef    struct    Londe{     //声明结点的类型和指向结点的指针类型
        ElemType    data;              //结点的数据域
        struct    Lnode    *next;    //结点的指针域
    }Lnode, * LinkList;    //LinkList为指向结构体Lnode的指针类型

定义链表L: LinkList L; <–> LNode *L;
定义结点指针p: Lnode *p; <–> LinkList p;

例如:存储学生学号、姓名、成绩的单链表结点类型定义如下

typedef    Struct{
                char    num[80];    //数据域
                char    name[8];    //数据域
                int    score;            //数据域
            }ElemType;

            typedef    struct    Lnode{
                ElemType    data;            //用结构类型定义数据域
                struct    Lnode    *next;   //指针域
            }Lnode   ,*LinkList;

单链表基本操作的实现
单链表的初始化(带头结点的单链表)即构造一个空表
【算法步骤】
(1)生成新结点做头结点,用头指针L指向头结点
(2)将头结点的指针域置空
【算法描述】

 Status    InitList_L(LinkList    &L){
           L=(LinkList)malloc(sizeof(LNode));
                                    //sizeof(LNode):从内存中找到一块空间;
                                    //malloc函数:将内存分配出来;
                                    //(LinkList):转换成此类型,经过此运算L就表示成这一空间的地址
           L->next=NULL;//将头结点的指针域置空
           return   OK;
 }

判断链表是否为空:
空表:链表中无元素,称为空链表(头指针和头结点仍然在)
【算法思路】 判断头结点指针域是否为空
【算法描述】

 int    ListEmpty(LinkList    L){        
 //若L为空表,则返回1,否则返回0
     if(L->next)    return    0;
     else    return    1;
}

单链表的销毁:链表销毁后不存在
【算法思路】从头指针开始,依次释放所有结点(包括头结点)
【算法描述】

Status    DestroyList_L(LinkList    &L){
    Lnode    *p;        //LinkList    p;
    while(L)              //非空
    {
      p=L;
      L=L->next;    //L得到下一结点的地址,指向下一结点
      free(p);
    }
 }

清空单链表:链表仍存在,但链表中无元素,成为空链表(头指针和头结点仍然在)
【算法思路】从首元结点开始依次释放所有结点,并将头结点指针域设置为空

Status    ClearList(LinkList    &L){
  Lnode    *p,*q;        //或LinkList    p,q;
  p=L->next;            //p指针指向首元结点(保存住头结点)
  while(p){                //结束条件:p==NULL
    q=p->next;    
    free(p);
    p=q;
  }
  L->next=NULL;    //头结点指针域为空
  return    OK;
}


求单链表的表长:
【算法思路】从首元结点开始,依次计数所有结点
【算法描述】

int    ListLength_L(LinkList    L){
  LinkList    p;
  p=L->next;    //p指向首元结点
  int    i=0;
  while(p){
     i++;
     p=p->next;
  }
  return    i;
}

重要操作:
p=L; //p指向头结点
s=L->next; //s指向首元结点
p=p->next; //p指向下一结点

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值