⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2.16.c

📁 部分高校使用anyview编程测试数据结构习题,此代码为数据结构题集(c语言版)严蔚敏版的课后习题答案.专门提供给在anyview上运行,全部为通告代码
💻 C
字号:
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<=0||j<=0||len<=0)return INFEASIBLE;
  p=la;k=1;
  while(p&&k<i)
     {
      prev=p;p=p->next;k++;
         }
  if(!p) return INFEASIBLE;
  q=p;k=1;
  while(q&&k<len)
     {
     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&&k<j-1){s=s->next;k++;}
       if(!s) return INFEASIBLE;
       q->next=s->next;s->next=p;
          }
  return OK;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -