链表中为何加头结点(实例)

链表中为何加头结点(实例)

ID:19901338

大小:126.00 KB

页数:16页

时间:2018-10-07

链表中为何加头结点(实例)_第1页
链表中为何加头结点(实例)_第2页
链表中为何加头结点(实例)_第3页
链表中为何加头结点(实例)_第4页
链表中为何加头结点(实例)_第5页
资源描述:

《链表中为何加头结点(实例)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、插入(不带头结点)插入(三种情况)第一种情况:在第一个结点前插入(插入前)(插入后)Lnewnodenewnodea1a2a1a2xxnewnode->next=L;L=newnode;L第二种情况:在链表中间插入(插入前)(插入后)newnodepnewnodepnewnode->next=p->next;p->next=newnode;第三种情况:在链表末尾插入p(插入前)(插入后)newnodenewnodepnewnode->next=p->next;p->next=newnode;算法描述intInsert(LinkListL,intx,inti){//在链表

2、第i个结点处插入新元素xLnode*p=L;intj=1;while(p!=NULL&&jnext;j++;}//找第i-1个结点if(p==NULL&&L!=NULL){printf(“无效的插入位置!”);//终止插入return0;}Lnode*newnode=(Lnode*)malloc(sizeof(Lnode));//创建新结点newnode->data=x;if(L==NULL

3、

4、i==1){//插入空表或非空表第一个结点之前newnode->next=L;//新结点成为第一个结点L=newnode;}else{//插在表中间或末尾n

5、ewnode->next=p->next;p->next=newnode;}return1;}带头结点的单链表头结点位于表的最前端,本身不带数据,仅标志表头。设置头结点的目的:简化链表操作(不管单链表是否为空,头指针均不为空;并使得对单链表的操作在各种情况下统一)。非空表空表^ana1LL^插入s->next=p->next;p->next=s;LsLsLs^Ls^pppp插入前插入后ss插入pps->next=p->next;p->next=s;intInsert(LinkListL,ListDatax,inti){//将新元素x插入在链表中第i号结点位置ListNode

6、*p=Locate(L,i-1);if(p==NULL)return0;//参数i值不合理返回0ListNode*newnode=//创建新结点(ListNode*)malloc(sizeof(ListNode));newnode->data=x;newnode->link=p->link;//链入p->link=newnode;return1;}删除q=p->link;p->link=q->link;free(q);删除前L(非空表)(空表)L^Lpq^pqL删除后intdelete(LinkListL,inti){//将链表第i号元素删去ListNode*p,*qp=L

7、ocate(L,i-1);//寻找第i-1个结点if(p==NULL

8、

9、p->link==NULL)return0;//i值不合理或空表q=p->link;p->link=q->link;//删除结点free(q);//释放return1;}单链表清空voidmakeEmpty(LinkListfirst){//删去链表中除头结点外的所有其它结点Lnode*q;while(first->next!=NULL)//当链不空时,循环逐个删去所有结点{q=first->next;first->next=q->next;free(q);//释放}}计算单链表长度intLength(

10、LinkListfirst){Lnode*p=first->next;//指针p指示第一个结点intcount=0;while(p!=NULL){//逐个结点检测p=p->next;count++;}returncount;}按值查找Lnode*Find(LinkListfirst,DataTypex){//在链表中从头搜索其数据值为x的结点Lnode*p=first->next;//指针p指示第一个结点while(p!=NULL&&p->data!=x)p=p->next;returnp;}按序号查找(定位)Lnode*Locate(LinkListfirst,inti)

11、{//返回表中第i个元素的地址if(i<0)returnNULL;Lnode*p=first;intk=0;while(p->next!=NULL&&knext;k++;}//找第i个结点if(k==i)returnp;//返回第i个结点地址elsereturnNULL;}LinkListcreateListR(void){charch;LinkListL=//建立头结点(LinkList)malloc(sizeof(Lnode));Lnode*s,*r;L->next=NULL;r=L;whil

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。