2.线性表习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、基于单链表写出向线性表的末尾添加一个元素的算法。
Status Insert(LinkList L,ElemType e)
{
LinkList p,q;
q=L;
p=(LinkList)malloc(sizeof(LNode));//为元素开辟空间
if(p==null) return error;
p->data=e;
while(q->next)
q=q->next;//使p指向最后一个节点
p->next=q->next;//插入p节点
q->next=p;
return ok;
}
2、若L为有序表,基于单链表写出算法,使得向L中插入一个元素e后依然有序。
Status InsertInOrder_L(LinkList &L,ElemType e)
{ LinkList p,q,s;
q=L;
p=L->next
s=(LinkList)malloc(sizeof(LNode));//为元素开辟空间
if(s==null) return error;
s->data=e;
while( p != NULL ) {
if( s->value >= p->value )
// 找到了s该插入的位置,并且此时p,q已记录下要插入的位置
break
else
q = p;
p = p->next;
}
// 将s节点插入到q,p节点之间
s->next = p;
q->next = s;
return ok;
}
3、基于单链表写出删除线性表尾元素的算法。
Status DeleteRear_L(LinkList &L,ElemType &e)
{
LinkList p,q,
P=L;
Q=L->next;
While(q->next!==null)
{ p=q;
Q=q->next;
}
p->next=null;
free(q);
return ok;
}
4. 基于单链表写出算法,删除等于给定值的第一个元素。
Status Delete_L(LinkList &L,ElemType e)
{ linklist p,q;
If(L==null) return error
Else
P=L;
Q=L->next;
While (q!==null)
{ If(q->data=e) break;//找到节点,提前停止循环
Else { p=q;
Q=q->next;
}
}
If(q==null) return
P->next=null;
Free(q);
return ok;
}
5. 试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表Status converse_sq(sqlist &L)
{ for(i=0;i { elemtype temp=L.elem[i]; L.elem[i]=l.elem[l.length-i+1]; l.elem[L.length-i+1]=temp; return ok; } 6.试写一算法,实现单链表的就地逆置。 思想:将原链表中的头结点和第一个节点断开,先构成一个新的空表,然后将原链表中的节点,从第一个节点开始,依次插图这个新标的头部。 void ConverseLink(LinkList &L){ linklist p, q; p=L->next; L->next=NULL; while(p!=NULL){ q=p; p=p->next; q->next=head->next; L->next=q; } Return ok; } 7.假设p指向循环链表L中某一结点(简称p结点),试写出删除p结点的直接前驱(假设存在)的算法。 Status Delete_L(LinkList &L) { linklist s, q; s=p; while(s->next->next!=p) {s=s->next;} q=s->next; s->next=p; free(q); return ok; } 8. 建立带表头节点的链表L ,满足用户从键盘正序位输入数据元素 Status creatlist_L(LinkList & L) { elemtype k; Linklist p,q; L=(linklist)malloc(sizeof(LNode)); If (!L)return error; L->next=Null; Q=l; scanf(k) While(k!=-1){ P=(linklist)malloc(sizeof(LNode)); If (!p)return error; p->data=k; p-next=q-next; q->next=q//q始终指向表尾 q=p; scanf(k);} return ok;