栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

单链表例题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

单链表例题

设有一个正整数序列组成的有序单链表(按递增有序,且允许
有相等的整数存在),请设计一个用最小的时间和最小空间的算
法实现下列功能:
(a) 确定在序列中比正整数 x 大的数有几个(相
同的数只计算一次,如序列{3、5、6、6、8、10、11、13、13、
16、17、20、20}中比 10 大的数有 5 个);
(b) 将单链表中比正整数 x 小的数按递减次序排列;
(c) 将正整数比 x 大的偶数从单链表中删除。要求:
(1)描述算法的基本设计思想;
(2)根据设计思想,采用 C 或 C++语言描述算法,给出注释;
(3)说明你所设计的算法的时间复杂度和空间复杂度

参考答案:

L为带头结点的单链表,k为所需正整数

  transform_list(LNode *L, int k)
  {
      LNode *p,*pre,*s,*r;
      int c=0,pre_data;
      p=L->next;r=p;pre_data=r->data;
      while(p!=NULL)
      {
          if(p->data<=k)
          {  s=p->next;
             p->next=L->next;
             L->next=p;
             p=s;
          }
          else
          {   if(pre_data!=p->data)
                  {
                      c=c+1;
                      pre_data=p->data;
                  }
              if(p->data%2==0)
              {   r->next=p->next;
                  free(p);
                  p=r->next;
              }
              else
              {    r->next=p;
                   r=p;p=p->next;
              }

          }
      }
      printf("the node greater than %d is %dn",k,c);
  }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879561.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号