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

您所在的位置:网站首页 单链表取值完整代码 小白版单链表的创建、初始化以及取值过程(小白详细版)

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

2024-07-15 06:22| 来源: 网络整理| 查看: 265

一、单链表的创建

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&&jnext;      //当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,说明idata;         //当找到位置之后 ,把该位置的数据域的内容给e       return OK;   } 

四、算法时间复杂度

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

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3