zoukankan      html  css  js  c++  java
  • 关于student-lite的总结①

    上次完成的学生管理系统是组队完成,而这次我们单独完成,虽然有上次的可以参考,但是依旧是有很多问题需要解决。

    首先的问题便是要求使用的快速排序无法实现,在最开始自己编写的快排函数调用时,总是查询第一个数据时可以正常调用,而查询第二个数据时便是段错误,研究了很久并且找大神帮忙,也没有解决这个问题,最后只得将大师兄代码摘下来自己修改加了上去。

     1 // 按学号快速排序,为后面二分法做准备
     2 void num_sort(Node *head,Node* tail)
     3 {
     4        if(NULL == head || NULL == tail || head == tail)
     5            return;
     6        Node* flag=head;
     7        Node* prev=head;
     8        Node* cur=head->next;
     9   
    10        while(cur!= tail->next)
    11        {
    12               student* stu_f = flag->data;
    13               student* stu_c = cur->data;
    14               if(stu_f->num > stu_c->num)
    15                {
    16                       prev=prev->next;
    17                       swap(prev,cur);
    18                }
    19                cur=cur->next;
    20 
    21        }
    22         swap(prev,flag);
    23         num_sort(head,prev);
    24         num_sort(prev->next,tail);
    25 }

    而关于二分查找,一开始我听大佬说:“干嘛要用二分查找?二分查找的前提是有序,但是既然已经有序了,直接用遍历不好了”,一开始我觉得没什么不对,后来同桌指点“现在我们写的项目数据很少,所以用不用二分查找没什么区别,但是以后数据很多,比如上万了,那么二分查找效率会高很多”,我才发现自己是不知身在此山中。

     1 //二分查找
     2 Node* _find_list(List* list,size_t left,size_t right,size_t id)
     3 {
     4     Node* node = NULL;
     5     if(left>=right || id>=right) return NULL;
     6     int p = (left+right)/2,i=0;
     7     if(id <= list->count/2)
     8     {
     9         if(p == id)  
    10         {
    11             node = list->head;
    12             for(i=0;i<p;i++,node=node->next);
    13             return node;
    14         }
    15         if(p > id)
    16             return _find_list(list,left,p,id);
    17         else
    18             return _find_list(list,p+1,list->count/2,id);
    19     }
    20     else
    21     {
    22         if(p == id)
    23         {
    24             node = list->tail;
    25             for(i=list->count-1;i>p;i--,node=node->prev);
    26             return node;
    27         }
    28         if(p > id)
    29             return _find_list(list,list->count/2+1,p,id);
    30         else
    31             return _find_list(list,p+1,right,id);
    32     }
    33 }
    34 Node* find_list(List* list,size_t id)
    35 {
    36     return _find_list(list,0,list->count,id);
    37 }

    关于这个使用递归的二分查找函数的逻辑:

    首先判断是否符合查找条件,不符合则返回空,然后if语句从链表左端开始查找,如果标杆值和id相同则整个半条链查找,如果p>id,则把链表最左端和p以及id返回递归,从链表最左端到p这一段链表继续查找,其余语句则和这一逻辑相同,不再赘述。

    而关于加密文件,我还没有实现,只是了解了将需要加密的单个提取出来加密, 这样也只是加密了int类型的,无法加密float类型数据,也无法做到大师兄要求的按字节加密,目前正在学习。

  • 相关阅读:
    DExpose2:Windows 下窗体平铺预览
    第二章 随机变量及其分布3
    资源文件分享到QQ群共享里的方法
    第三章 多维随机变量及其分布1
    RegexBuddy
    第四章 随机变量的数字特征3
    html 表格排序
    关于微软自带的身份和角色验证
    学习中小型软件开发步骤
    学习路线图
  • 原文地址:https://www.cnblogs.com/kid971220/p/10183266.html
Copyright © 2011-2022 走看看