降低时间复杂度 以空间换时间

降低时间复杂度以空间换时间

若一个程序有二重循环时,我们可以把他拆成两个循环以达到降低时间复杂度的效果,这是以空间换时间的一种办法,所以空间复杂度会上升。这是一个简易学校的存储所有学生信息的管理表,我接下来就说一种删除函数 说明 怎么一时间换空间。

在这里插入图片描述

struct student
{
   int num;//学号
   char a[];//姓名
   struct student *next;//指针
}student;

struct class
{
  int no;//班号
  struct student *stu;//班级指向学生的指针
  struct class *across;//班级指向班级的指针
}class;

void Deletestudent(class **head,int n,int m)
{
   int classflag=0;//建立一个班级的标志 这是时间换空间的重点操作
   class *p=*head;//建立班级指针
   while(p!=NULL)//遍历班级
   {
     if(p->no==n)
     {
        clsaaflag=1;//找到学生所在的班级,改变flag
        break;//跳出此循环
     }
     p=p->across;
   }
   if(classflag==0)
   {
      printf("没有找到班级")return}
   student *pre=p->stu;//接下来是遍历学生链表找到要删学生
   student *pr=p->stu;
   int studentflag=0;
   while(pr!=NULL)//进入下一个循环,本来这个循环是要嵌套在
   {             //上个循环内部 但因为flag和break而跳出了
      if(pr->num==m)//上个循环,单独写这个循环,这样时间
      {             //复杂度降低了,达到以空间换时间
         studentflag=1;
         break;//找到需删学生的学号 跳出循环
      }
      pre=pr;
      pr=pr->next;//指针前移
   }
   if(!studentflag)
   {
      printf("没有找到次学生")return;
   }
   if(p->next==pr)
   {
     p->next=pr->stu;//删除学生
   }
   else
   {
     pre->next=pr->stu;//删除学生
   }
   free(pr);//释放pr
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值