04线性表的链式表示
单链表的定义
线性表的链式存储又称为单链表,通过指针实现线性逻辑关系
通过一组任意的存储单元来存储线性表当中的数据元素
L=(a1,a2,a3,a4,....,an);
typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList;
优点:链表的第一个位置和其他的位置的操作统一空表和非空表的操作的统一。
05单链表的基本操作
头插法建立
s-next=L-next;L-next=s;LinkListListHeadInsert(LinkListL){LNode*s;intx;L=(LinkList)malloc(sizeof(LNode));L-next=NULL;scanf("%d",x);while(x!=){s=(LNode*)malloc(sizeo(LNode));s-data=x;s-next=L-next;L-next=s;scanf("%d",x);}returnL;}
尾插法建立
r-next=s;r=s;LinkLIstList_TailInsert(LinkListL){intx;L=(LinkList)malloc(sizeo(LNode));LNode*s,*r=L;scanf("%d",x);while(x!=9){s=(LNode*)malloc(szieof(LNode));s-data=x;r-next=s;r=s;scanf("%d",x);}r-next=NULL;returnL;}按照序号查找,按照值查找
LNode*LocateElem(LinkListL,ElemTypee){LNode*p=L-next;while(p!=NULLp-data!=e)p=p-next;returnp;}LNode*GetElem(LinkListL,inti){intj=1;LNode*p=L-next;if(i==0)returnL;if(i1)returnNULL;while(pji){p=p-next;j++;}returnp;}插入节点
p=GetElem(L,i-1);s-next=p-next;p-next=s;
s-next=head;head=s;
删除节点
p=GetElem(L,i-1);q=p-next;p-next=q-next;free(q);
删除给定的节点*p
q=p-next;p-data=p-next-data;p-next=q-next;free(q);
求表长
intcount=0;p=head;while(p-next!=NULL){count++;p=p-next;}06线性表的特殊链表
双链表
p=GetElem(L,i-1);typedefstructDNode{ElemTypedata;structDNode*prior,*next;}DNode,*DLinklist;
插入操作:o(1)
s-next=p-next;p-next-prior=s;s-prior=p;p-next=s;删除操作o(1)
p-next=q-next;q-next-prior=p;free(q);循环单链表
仅仅设置尾指针的操作效率会更高
循环双链表
空表的判断
L-next==L;L-next==L;L-prior==L;
静态链表
#defineMaxSize50typedefstructDNode{ElemTypedata;intnext;}SLinkList[MaxSize];欢迎打赏,么么哒!
●句子
●JAVA
●C语言以及算法笔记
●大学生生活图鉴
●JavaScript
●计算机网络原理
●计算机组成原理
●操作系统
●数据库系统概论
●数据结构
●英语
●R语言
●Linux
●人生哲学以及电竞
●云计算与人工智能
●新媒体运营以及各种资源分享
●明星电视剧社会现象娱乐
仙女都在看点点点,赞和在看都在这儿!凡花花的小窝欢迎赞赏