数据结构习题及答案

源代码在线查看: 2.16.c

软件大小: 52 K
上传用户: GUAIGUAICHENGTI
关键词: 数据结构
下载地址: 免注册下载 普通下载 VIP

相关代码

				2.16③  已知指针la和lb分别指向两个无头结点单链表中
				的首元结点。 下列算法是从表la中删除自第i个元素起共
				len个元素后,将它们插入到表lb中第i个元素之前。试问
				此算法是否正确? 若有错,则请改正之。
				
				实现下列函数:
				Status DeleteAndInsertSub(LinkList &la, LinkList &lb,
				                          int i, int j, int len);
				// la和lb分别指向两个单链表中第一个结点,        */
				/* 本算法是从la表中删去自第i个元素起共len个元素,*/
				/* 并将它们插入到lb表中第j个元素之前,           */
				/* 若lb表中只有j-1个元素,则插在表尾。           */
				
				单链表类型定义如下:
				typedef struct LNode{
				    ElemType      data;
				    struct LNode *next;
				} LNode, *LinkList;
				Status DeleteAndInsertSub(LinkList &la, LinkList &lb,
				                          int i, int j, int len)
				// la和lb分别指向两个单链表中第一个结点,        */
				/* 本算法是从la表中删去自第i个元素起共len个元素,*/
				/* 并将它们插入到lb表中第j个元素之前,           */
				/* 若lb表中只有j-1个元素,则插在表尾。           */
				{
				  LinkList p,q,s,prev;
				  int k;
				  if(i				  p=la;k=1;
				  while(p&&k				     {
				      prev=p;p=p->next;k++;
				         }
				  if(!p) return INFEASIBLE;
				  q=p;k=1;
				  while(q&&k				     {
				     q=q->next;k++;
				         }
				  if(!q) return INFEASIBLE;
				  if(i==1) la=q->next;
				  else prev->next=q->next;
				  if(j==1){q->next=lb; lb=p;}
				  else{
				       s=lb;k=1;
				       while(s&&knext;k++;}
				       if(!s) return INFEASIBLE;
				       q->next=s->next;s->next=p;
				          }
				  return OK;
				}
							

相关资源