小白版单链表的创建、初始化以及取值过程(小白详细版) |
您所在的位置:网站首页 › 单链表取值完整代码 › 小白版单链表的创建、初始化以及取值过程(小白详细版) |
一、单链表的创建
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 |