《趣学算法》学习打卡Day 7


《趣学算法》学习打卡Day7

为了使程序代码的逻辑性更强,可阅读性更好,上课老师有教模块化编程,那么来看看:

模块化程序设计

将一个大程序按照功能划分为若干小程序模块,每个小程序模块完成一个确定的功能,并在这些模块之间建立必要的联系,通过模块的互相协作完成整个功能的程序设计方法。

利用函数: 不仅可以实现程序的模块化,使得程序设计更加简单和直观,从而提高了程序的易读性和可维护性 。

对函数是模块化的最佳选择,但是你有没有想过,你随手定义的a,b,c,m,n,等变量让代码的可读性直线下降呢?

那么对于学过面向对象编程的我们,结构体,类这些基本知识点是不是该运用起来了?

结构体:

struct 结构名
{
    //成员列表(c++支持函数)
}

typedef struct 结构名
{
    //成员列表
}别名
eg:
/*
古董:
    属性:编号,重量
*/    
struct antique{
    int id; //古董的编号
    double w; //古董的重量
}s[N];//N为const int N=1000005;
/*
宝物:
	属性:重量,价值,性价比;
*/
struct three{
    double w;//每个宝物的重量
    double v;//每个宝物的价值
    double p;//性价比
}s[M];//const int M=1000005;
/*
会议:
	属性:开始时间,结束时间,会议编号
*/
struct Meet
{
    int beg;   //会议的开始时间
    int end;   //会议的结束时间
    int num;   //记录会议的编号
}meet[1000];   //会议的最大个数为1000
/*
结点:
	属性:顶点u,源点到顶点u的最短路径step。
	函数:重载构造函数
	功能:重载运算符
*/
struct  Node{
    int u,step;
    Node(){};
    Node(int a,int sp){
        u=a;step=sp;
    }
    bool operator < (const  Node& a)const{  // 重载 <
        return step>a.step;
    }
};

类:

class name
{
    private:
    //成员列表;
    public:
    //成员列表;
}

class setMeet{
  public:
    void init();
    void solve();
  private:
    int n,ans; // n:会议总数 ans: 最大的安排会议总数
};

函数:

void Dijkstra(int st){
    priority_queue  Q;  // 优先队列优化
    Q.push(Node(st,0));
    memset(flag,0,sizeof(flag));//初始化flag数组为0
    for(int i=1;i<=n;++i)
      dist[i]=INF; // 初始化所有距离为,无穷大
    dist[st]=0;
    while(!Q.empty())
    {
        Node it=Q.top();//优先队列队头元素为最小值
        Q.pop();
        int t=it.u;
        if(flag[t])//说明已经找到了最短距离,该结点是队列里面的重复元素
            continue;
        flag[t]=1;
        for(int i=1;i<=n;i++)
        {
            if(!flag[i]&&map[t][i]dist[t]+map[t][i])
                {   // 求距离当前点的每个点的最短距离,进行松弛操作
                    dist[i]=dist[t]+map[t][i];
                    Q.push(Node(i,dist[i]));// 把更新后的最短距离压入优先队列,注意:里面的元素有重复
                 }
            }
        }
    }
}

stack栈:

//先进后出
进栈pop
出栈push    

queue队列:

//先进先出

priority_queue优先队列:

//

template< class T>类模板:

const常量:

const int N=1000005;

bool布尔变量:

//bool值只有:true和false
//其中true=1,false=0;
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif

memset函数:

memset函数按字节对内存块进行初始化,所以不能用它将int数组初始化为0和-1之外的其他值

void *memset(void *s, int ch, size_t n);
函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
    //头文件:#include

sort函数:(这个我有在昨天讲过就不翻了)

总结:

有点迷茫的味道了,天天也没去那去,也没做出什么事,恼火呀////