欢迎来到天天文库
浏览记录
ID:6471522
大小:39.50 KB
页数:3页
时间:2018-01-15
《2.线性表习题答案》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1、基于单链表写出向线性表的末尾添加一个元素的算法。StatusInsert(LinkListL,ElemTypee){LinkListp,q;q=L;p=(LinkList)malloc(sizeof(LNode));//为元素开辟空间if(p==null)returnerror;p->data=e;while(q->next)q=q->next;//使p指向最后一个节点p->next=q->next;//插入p节点q->next=p;returnok;}2、若L为有序表,基于单链表写出算法,使得向
2、L中插入一个元素e后依然有序。StatusInsertInOrder_L(LinkList&L,ElemTypee){LinkListp,q,s;q=L;p=L->nexts=(LinkList)malloc(sizeof(LNode));//为元素开辟空间if(s==null)returnerror;s->data=e;while(p!=NULL){if(s->value>=p->value)//找到了s该插入的位置,并且此时p,q已记录下要插入的位置breakelseq=p;p=p->next;}
3、//将s节点插入到q,p节点之间s->next=p;q->next=s;returnok;}3、基于单链表写出删除线性表尾元素的算法。StatusDeleteRear_L(LinkList&L,ElemType&e){LinkListp,q,P=L;Q=L->next;While(q->next!==null){p=q;Q=q->next;}p->next=null;free(q);returnok;}4.基于单链表写出算法,删除等于给定值的第一个元素。StatusDelete_L(LinkList&
4、L,ElemTypee){linklistp,q;If(L==null)returnerrorElseP=L;Q=L->next;While(q!==null){If(q->data=e)break;//找到节点,提前停止循环Else{p=q;Q=q->next;}}If(q==null)returnP->next=null;Free(q);returnok;}5.试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表Statusconverse_sq(sqlist&L){for(i=0;i<
5、L.length-1/2;i++;){elemtypetemp=L.elem[i];L.elem[i]=l.elem[l.length-i+1];l.elem[L.length-i+1]=temp;returnok;}6.试写一算法,实现单链表的就地逆置。思想:将原链表中的头结点和第一个节点断开,先构成一个新的空表,然后将原链表中的节点,从第一个节点开始,依次插图这个新标的头部。voidConverseLink(LinkList&L){linklistp,q;p=L->next;L->next=NUL
6、L;while(p!=NULL){q=p;p=p->next;q->next=head->next;L->next=q;}Returnok;}7.假设p指向循环链表L中某一结点(简称p结点),试写出删除p结点的直接前驱(假设存在)的算法。StatusDelete_L(LinkList&L){linklists,q;s=p;while(s->next->next!=p){s=s->next;}q=s->next;s->next=p;free(q);returnok;}8.建立带表头节点的链表L,满足用户
7、从键盘正序位输入数据元素Statuscreatlist_L(LinkList&L){elemtypek;Linklistp,q;L=(linklist)malloc(sizeof(LNode));If(!L)returnerror;L->next=Null;Q=l;scanf(k)While(k!=-1){P=(linklist)malloc(sizeof(LNode));If(!p)returnerror;p->data=k;p-next=q-next;q->next=q//q始终指向表尾q=p;s
8、canf(k);}returnok;
此文档下载收益归作者所有