小白版单链表的创建、初始化以及取值过程(小白详细版)

一、单链表的创建

typedef struct LNode     //定义节点为结构体类型 ,typedef给LNode重命名为下面的两个名字 
{
    ElemType data;        //定义数据域,类型为ElemType,此类型为用户自定义类型,用户可以根据                       需要进行定义,例如,我需要是int类型,我就在一开始时给int重命名为ElemType struct LNode *next;    //定义指针域,指针域指向下一个节点,存的是struct LNode类型变量的地址 
}LNode,*LinkList;          //LNode为结构体类型的普通类型 ,*LinkList为结构体类型的指针类型 ,因此LNode *p和LinkList p是等价的,但为了增加程序可读性,一般用LinkList定义头指针,LNode定义中间的指针 

二、单链表的初始化


Status InitList(LinkList &L)    //Status为函数类型,也由用户根据需要自己定义,例如想要是int类型的,就在开始时给int重命名为Status ,&为引用,使用&时,形参改变实参也会变,形参相当于只是实参的重命名,因为初始化链表从无到有,我们需要实参也发生相应变化,所以用引用   

{     L=new LNode;    //生成一个头节点,使头指针指向它 
    L->next=NULL;     //当刚创建头节点时,后面还没有节点,所以指针域为空 
    if(L==NULL)   return ERROR;    //创建不一定成功,看看L是否为空,如果为空,说明创建失败,返回ERROR,成功返回OK 
    return OK;      //ERROR和OK 都是用户在一开始可以给他们自定义数值的,例如#define OK 1 
 } 
 
 


 三、单链表的取值


 Status GetElem(LinkList L,int i,ElemType e)     //i为要取值的位置,e是我们要赋值的变量 
 {
     LNode*p;int j;      //创建一个指针p,使指针p移动,协助我们找到位置,j相当于一个计数器,记录当前的位置,注意j和p要始终一直,当p指向序号为1的节点时,j的值就要为1 
     p=new LNode;      //如果要取值时,我们指向哪个节点,就可以取出哪个节点的数值,所以我们直接直接指向首元节点,首元节点的地址在头节点中,因为头指针指向头节点,所以l->next 可以找到首元结点的位置 
     p=L->next;
     j=1;    //因为p指向首元结点,下标为1,所以j也为1,j是计数器,记录当前位置,要与p一一对应 
     while(p&&j<i){      //P的合法范围为a1到an,所以当p等于null时已经超出p的合法范围,此时循环不再执行,只有当i的值大于n,才会使p能执行到an再往下进行,所以i的位置也不合法 
         p=p->next;      //当j=i时,此时循环结束此时p指向ai,是在合法范围内结束,此时循环是由于找到位置而正常结束,若是因为p=NULL而结束,此时是不合法的结束 
         j++;
     }
     if(p==NULL||j>i)     //在此过程中,i的合法范围为1到n,如果说p=NULL,说明p循环到a(n+1)了,此时为空,这是由于i的位置超过了n才会使p一直循环到NULL ,若是因为j>i不满足,因为j的初始数值为1,说明i<1,不是合法i的位置 
     return ERROR;     
     e=p->data;         //当找到位置之后 ,把该位置的数据域的内容给e 
     return OK;
  } 

四、算法时间复杂度

初始化:因为每一个操作只进行一遍,所以Tn=O(1);

取值:有可能第一次就可以取到数值,有可能一直循环到最后一次,取平均执行次数作为fn,所以Tn=O(n)。

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值