-
代码流程图_【算法与数据结构】伪代码与流程图
2021-01-15 08:05:15js难的是抽象概念编程语言也能抽象JS Python java PHP 根本就没区别这些语言都有声名if......--简洁之美2,所有的编程逻辑,都在使用逻辑三段论逻辑命题1:js有7种数据类型:string,number,bool symbol undefine...js难的是抽象概念
编程语言也能抽象
JS Python java PHP 根本就没区别
这些语言都有
- 声名
- if...else
- while 循环 for 循环
- 函数
- 对象
这意味着
- 你没有必要过分关注语言的细节
- 你首先理解这些语言的不变之处
- 以不变应万变
1,对编程的热爱---简洁之美
2,所有的编程逻辑,都在使用逻辑
- 三段论逻辑
- 命题1:js有7种数据类型:string,number,bool symbol undefined null object
- 命题2js函数不属于前六种类型
- 推论:js的函数属于object类型
命题1: js中所有函数都是由Function 构造的
命题2: Function,object,Arry 是函数
推论:Function ,object ,Array 是由 Function 构造的逻辑VS 直觉
- 直觉的好处
- 直觉能让你快速学会一些东西
- 比如数字,字符串,数组,对象都可以靠直觉学会
- 直觉的坏处
- 直觉却又能阻止你学会另外一些东西
- 这时你就只能依靠逻辑来说服自己
- 比如虽然不知Function 是如何构造Function的,但逻辑告诉我们,确实如此
如何用代码表示逻辑
- 栗子
- 输出两个数中较大一个数
- 如果第1个数大于第二个数,就输出第1个数
- 代码
- a=[12,32]
- if a.age(0)>a.get(1)
- print a.get(0)
- else
- print a.get(1)
结论
用 if...else...可以表示逻辑---发现规律栗子2
- 输出N个数中最大的一个数
- 找到第 1,2个数字中较大的那一个,存入max
- 找到max和第3个数字中较大的那个,存入max
- 找到max和第,,,个,存入max
- max 就是最大的属
代码
- a =[12,32,9,1,23,6]
- max = a [0]
- for i from 1 to a.length() -1
- if a.get(i) max then max
结论
用for循环可以表示逻辑只需要三种语句---[结构化编程] 理论*
但结构化编程在某些情况下回变得麻烦,比如错误处理三种逻辑语句搞定所有编程逻辑
- 顺序执行语句
- 语句1
- 语句2
- 条件判断语句
- if...then...else..
- if...eles if ...else
- 循环语句
- while..do...
- for i from 1 to n ....
流程图 , 伪代码的好处
- 锻炼你的大脑
- 你必须自己画出来
- 不能运行在计算机里
整理你的思路
- 思路乱,则图乱
- 伪代码都写不好,则代码更写不好
两个数字找到较大的一个的流程图
n个数字找到较大一个的流程图
总结
- 逻辑很重要
- 用三种语句表达逻辑
- 用图和伪代码表示三种语句
数据结构的作用
- 数据结构作用
- 提前记住一些结构
- 这些结构很常见
- 这些结构能让你很快理清思路
- 这些结构面试经常问
- 锻炼你得抽象能力
- 一种数据结构往往能解决很多类似问题
- 如果你选错了数据结构,你根本就不想出路
- 牛逼的程序员更重视数据结构而,不是算法
8种排序算法快速学会数据结构
-
32-【算法与数据结构】伪代码与流程图
2020-04-27 22:50:02一.对代码的热爱 简洁之美,用简单的东西解决复杂的问题 电影是一门艺术,编程也是 一丝不苟,态度等价值观 二....采用三段论逻辑,比如 ...3种结构化编程 三种语句解决逻辑 顺序执行语句 语句1 语句2 判断执行...一.对代码的热爱
简洁之美,用简单的东西解决复杂的问题
电影是一门艺术,编程也是
一丝不苟,态度等价值观
二.逻辑也叫算法
采用三段论逻辑,比如
- 所有的函数都是由Function构造的
- Function,Array,Object都是函数
- 推论出Function、Array、Object都是由Function构造的
3种结构化编程 三种语句解决逻辑
-
顺序执行语句
语句1
语句2
-
判断执行语句
if …then …else
if…else if …else
-
循环执行语句
while…do…
for i from 1 to n …
伪代码:
when i<10
语句1
i+=1
语句2
流程图和伪代码
方型代表顺序执行,圆角矩形代表开始结束
菱形代表条件判断,循环必定成圈
用流程图求两个数最大
用MindManager
用流程图求n个数最大—伪代码
总结
- 逻辑很重要
- 用三种语句表达逻辑
- 用图和伪代码可以表示三种语句
三.数据结构=数据逻辑形式+操作
如何表示2个数据
顺序有意义,如坐标 如first和last操作
顺序无意义,如血压 无需first和last操作
如何表示N个数据 线性
顺序有意义:数组 要提供索引等操作
顺序无意义:集合
如何表示N对N个数据 哈希表
key ->value
hash={1001=>‘小方’,1002=>‘小红’}
哈希表和js对象区别:js有下标 有隐藏属性
如学号对姓名
【经典题】
如何计算一段英语中多少个字母,大小写的,符号出现的次数:
用哈希表做
-
排序中减治法算法伪代码_【算法与数据结构】伪代码与流程图
2020-12-05 15:39:49js难的是抽象概念编程语言也能抽象JS Python java PHP 根本就没区别这些语言都有声名if......--简洁之美2,所有的编程逻辑,都在使用逻辑三段论逻辑命题1:js有7种数据类型:string,number,bool symbol undefine...js难的是抽象概念
编程语言也能抽象
JS Python java PHP 根本就没区别
这些语言都有
- 声名
- if...else
- while 循环 for 循环
- 函数
- 对象
这意味着
- 你没有必要过分关注语言的细节
- 你首先理解这些语言的不变之处
- 以不变应万变
1,对编程的热爱---简洁之美
2,所有的编程逻辑,都在使用逻辑
- 三段论逻辑
- 命题1:js有7种数据类型:string,number,bool symbol undefined null object
- 命题2js函数不属于前六种类型
- 推论:js的函数属于object类型
命题1: js中所有函数都是由Function 构造的
命题2: Function,object,Arry 是函数
推论:Function ,object ,Array 是由 Function 构造的逻辑VS 直觉
- 直觉的好处
- 直觉能让你快速学会一些东西
- 比如数字,字符串,数组,对象都可以靠直觉学会
- 直觉的坏处
- 直觉却又能阻止你学会另外一些东西
- 这时你就只能依靠逻辑来说服自己
- 比如虽然不知Function 是如何构造Function的,但逻辑告诉我们,确实如此
如何用代码表示逻辑
- 栗子
- 输出两个数中较大一个数
- 如果第1个数大于第二个数,就输出第1个数
- 代码
- a=[12,32]
- if a.age(0)>a.get(1)
- print a.get(0)
- else
- print a.get(1)
结论
用 if...else...可以表示逻辑---发现规律栗子2
- 输出N个数中最大的一个数
- 找到第 1,2个数字中较大的那一个,存入max
- 找到max和第3个数字中较大的那个,存入max
- 找到max和第,,,个,存入max
- max 就是最大的属
代码
- a =[12,32,9,1,23,6]
- max = a [0]
- for i from 1 to a.length() -1
- if a.get(i) max then max
结论
用for循环可以表示逻辑只需要三种语句---[结构化编程] 理论*
但结构化编程在某些情况下回变得麻烦,比如错误处理三种逻辑语句搞定所有编程逻辑
- 顺序执行语句
- 语句1
- 语句2
- 条件判断语句
- if...then...else..
- if...eles if ...else
- 循环语句
- while..do...
- for i from 1 to n ....
流程图 , 伪代码的好处
- 锻炼你的大脑
- 你必须自己画出来
- 不能运行在计算机里
整理你的思路
- 思路乱,则图乱
- 伪代码都写不好,则代码更写不好
两个数字找到较大的一个的流程图
n个数字找到较大一个的流程图
总结
- 逻辑很重要
- 用三种语句表达逻辑
- 用图和伪代码表示三种语句
数据结构的作用
- 数据结构作用
- 提前记住一些结构
- 这些结构很常见
- 这些结构能让你很快理清思路
- 这些结构面试经常问
- 锻炼你得抽象能力
- 一种数据结构往往能解决很多类似问题
- 如果你选错了数据结构,你根本就不想出路
- 牛逼的程序员更重视数据结构而,不是算法
8种排序算法快速学会数据结构
-
稀疏矩阵加法运算流程图_数据结构之稀疏矩阵——稀疏矩阵加法和乘法
2021-01-17 10:28:01题目:假设稀疏矩阵A和B均以三元组表作为存储结构,试写出矩阵相加和相乘的算法,另设三元组表C存放结果矩阵。要求:从键盘输入稀疏矩阵A和B检测A和B能否相加/相乘如能,做矩阵相加和相乘运算,并打印运算结果如不能...题目:假设稀疏矩阵A和B均以三元组表作为存储结构,试写出矩阵相加和相乘的算法,另设三元组表C存放结果矩阵。
要求:
从键盘输入稀疏矩阵A和B
检测A和B能否相加/相乘
如能,做矩阵相加和相乘运算,并打印运算结果
如不能,应显示出原因
这里主要就是三元组的运用,比较基础,详情见代码中的注释。
#include
#include
#define OK 1 //函数结果状态
#define ERROR 0
#define MAX 100
typedef int Status;//函数结果状态类型
typedef struct{
int i,j; //三元组的行号、列号;
int e; //三元组的值;
}Triple;
typedef struct{
Triple data[MAX];//非零元三元组表示
int rpos[MAX]; //稀疏矩阵三元组各行起始坐标
int mu,nu,tu; //矩阵的行数、列数和非零元个数
}Matrix;
void Input(Matrix *M,Matrix *N);
Status CreateMatrix(Matrix *M);
Status PrintMatrix(Matrix M);
Status PlusMatrix(Matrix M, Matrix N, Matrix *D);
Status MultMatrix(Matrix M, Matrix N, Matrix *Q);
int main(){
//freopen("in.txt","r",stdin);
//freopen("output.txt","w",stdout);
Matrix M,N,D,Q;
Input(&M,&N);
if(!PlusMatrix(M,N,&D))
printf("They cannot be added.\n");
if(!MultMatrix(M,N,&Q))
printf("They cannot be multiplied.\n");
return 0;
}
void Input(Matrix *M,Matrix *N){
printf("Please input the rows and cols and number of the nonzero element:");
if(!CreateMatrix(M))
printf("Error Create M!\n");
PrintMatrix(*M);
printf("Please input the rows and cols and number of the nonzero element:");
if(!CreateMatrix(N))
printf("Error Create N!\n");
PrintMatrix(*N);
}
Status CreateMatrix(Matrix *M){//创建稀疏矩阵,采取三元组存储
int num[MAX]={0}; //对应行非零元个数
int flag[MAX][MAX]={0};//标记对应位置是否已有非零元
int i,j,e; //非零元三元组的临时存储变量
scanf(" %d%d%d",&M->mu,&M->nu,&M->tu);
while(M->mu < 0 || M->nu < 0 || M->tu > M->mu * M->nu){//判断矩阵行数、列数和非零元个数是否合法
printf("The rows,cols and number of nonzero element is out of normal range!!\n");
printf("Please input again:");
scanf(" %d%d%d",&M->mu,&M->nu,&M->tu);
}
if(!M->tu) return OK;//全部为零元素,直接返回
for(int k = 1;k <= M->tu;k++){//输入非零元
printf("Please input the row,col,and data of element:");
scanf(" %d%d%d",&i,&j,&e);
while(i <= 0 || i > M->mu || j <= 0 || j > M->nu){//判断输入非零元行号、列号合法
printf("The row,col and data of element is out of normal range!!\n");
printf("Please input again:");
scanf(" %d%d%d",&i,&j,&e);
}
while(!e){//判断是否非零元
printf("Zero element occurs!\n");
scanf(" %d",&e);
}
if(!flag[i][j]){//判断该位置是否已有非零元
flag[i][j] = 1;
}
else{
printf("Here exists!\n");
continue;
}
int l,m;
//寻找该三元组的位置
if(k==1){
M->data[k].i = i;
M->data[k].j = j;
M->data[k].e = e;
continue;
}
for(l = 1;l < k && (i > M->data[l].i || (i == M->data[l].i && j > M->data[l].j));l++);
for(m = k-1;m >= l;m--){//依次向后移动
M->data[m+1] = M->data[m];
//printf("%d\n",M->data[m+1].i);
}
//保存数据
M->data[l].i = i;
M->data[l].j = j;
M->data[l].e = e;
//printf("%d\t%d\t%d",M->data[k].i,M->data[k].j,M->data[k].e);
//printf("%d\n",k);
}
//求各行非零元起始位置
if(M->tu){//判断非零元个数是否为0
for(int m = 1;m <= M->tu;m++)
++num[M->data[m].i];//求M中每行非零元素个数
M->rpos[1] = 1;//起始位置赋值
for(int m = 2;m <= M->tu;m++)
M->rpos[m] = M->rpos[m-1] + num[m-1];
}
return OK;
}
Status PlusMatrix(Matrix M, Matrix N, Matrix *D){//求稀疏矩阵的和Q=M+N
if(M.mu != N.mu || M.nu != N.nu)//检查稀疏矩阵M和N的行数和列数是否对应相等
return ERROR;
int i = 1,j = 1,k = 1;//各矩阵三元组移动临时变量
D->mu = M.mu;
D->nu = M.nu;
D->tu = 0;
if(M.tu*N.tu == 0)//零矩阵,直接返回
return OK;
while(i <= M.tu && j <= N.tu){//M和N均不为空
if(M.data[i].i < N.data[j].i || (M.data[i].i == N.data[j].i && M.data[i].j < N.data[j].j)){//以行为主序,M中的节点在N前
D->tu++;
D->data[k++] = M.data[i++];//结构体赋值
}
else if(M.data[i].i == N.data[j].i && M.data[i].j == N.data[j].j){//M和N节点对应
if(M.data[i].e+N.data[j].e){//M和N相加之和不为0
D->data[k].i=M.data[i].i;
D->data[k].j=M.data[i].j;
D->data[k++].e=M.data[i].e+N.data[j].e;
D->tu++;
//printf("%d\n",D->data[k-1].e);
}
i++;
j++;
}
else if(M.data[i].i > N.data[j].i ||(M.data[i].i == N.data[j].i && M.data[i].j > N.data[j].j)){//N节点在M前
D->tu++;
D->data[k++] = N.data[j++];
}
}
while(i <= M.tu){//将矩阵N的剩余元素插入矩阵
D->tu++;
D->data[k++] = M.data[i++];
}
while(j <= N.tu){//将矩阵M的剩余元素插入矩阵
D->tu++;
D->data[k++] = N.data[j++];
}
//printf("%d\n",k);
printf("Matrix A plus Matrix B is D:\n");
PrintMatrix(*D);
return OK;
}
Status MultMatrix(Matrix M, Matrix N, Matrix *Q){//进行矩阵M和N相乘
int arow,brow,ccol,ctemp[MAX];
int p,q,tp,i,t;//p,q,i为中间变量;tp,t分别为M的各行位置上限
if(M.nu != N.mu)//判断M的列数和N的行数是否相等
return ERROR;
Q->mu = M.mu;
Q->nu = N.nu;
Q->tu = 0;
if(M.tu*N.tu == 0)//判断矩阵是否为非零矩阵
return OK;
for(arow = 1;arow <= M.mu;arow++){//处理M的每一行
for(i = 1;i <= N.nu;i++)//元素累加清零
ctemp[i] = 0;
Q->rpos[arow] = Q->tu+1;//起始坐标赋值
if(arow < M.mu)//找到该行移动次数上限
tp = M.rpos[arow+1];
else
tp = M.tu+1;
for(p = M.rpos[arow];p < tp;p++){//求Q中第arow行的非零元
brow = M.data[p].j;
if(brow < N.mu)//找到N中该行移动次数上限
t = N.rpos[brow+1];
else
t = N.tu+1;
for(q = N.rpos[brow];q < t;q++){
ccol = N.data[q].j;//成绩元素在N中列号
ctemp[ccol] += M.data[p].e * N.data[q].e;
}
}
for(ccol = 1;ccol <= Q->nu;ccol++){//存储非零元
if(ctemp[ccol]){
Q->tu++;
Q->data[Q->tu].i = arow;
Q->data[Q->tu].j = ccol;
Q->data[Q->tu].e = ctemp[ccol];
}
}
}
printf("Matrix A multiply Matrix B is Q:\n");
PrintMatrix(*Q);
return OK;
}
Status PrintMatrix(Matrix M){//打印矩阵
int i,j,k = 1;//临时中间变量
printf("The matrix is:\n");
for(i = 1;i <= M.mu;i++){//遍历矩阵
for(j = 1;j <= M.nu;j++){
if(i == M.data[k].i && j == M.data[k].j){//存在三元组匹配,输出
printf("%d\t",M.data[k].e);
k++;
}
else
printf("0\t");
}
printf("\n");
}
printf("The matrix has %d rows, %d cols ,and %d nonzero elements.\n",M.mu ,M.nu, M.tu);
return OK;
}
-
数据结构与算法记录——函数递归
2020-04-09 21:33:28排队购票问题利用函数递归思想完成新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右... -
linux 内核网络,数据接收流程图
2013-02-20 10:58:134.3 数据接收流程图 各层主要函数以及位置功能说明: 1)sock_read:初始化msghdr{}的结构类型变量msg,并且将需要接收的数据存放的地址传给msg.msg_iov->iov_base. net/socket.c 2)sock_... -
linux内核网络,数据发送流程图
2013-02-20 10:57:164.2 数据发送流程图 各层主要函数以及位置功能说明: 1)sock_write:初始化msghdr{}结构 net/socket.c 2)sock_sendmsg:net/socket.c 3)inet_sendmsg:net/ipv4/af_net.c 4)tcp_sendmsg:申请sk_buff{}... -
【Linux深入】epoll源码的函数调用流程分析(图)
2017-07-30 08:01:24当然,这篇博文是建立在上一篇博文的基础上,若你还没看过epoll源码,那么我建议你最好还是看一下,请点击【Linux深入】epoll源码剖析 接下来我就以流程图的形式介绍一下函数的调用过程。 整体的数据结构图注:图中... -
Linux内核 网络数据接收流程图
2017-06-15 15:30:001)sock_read:初始化msghdr{}的结构类型变量msg,并且将需要接收的数据存放的地址传给msg.msg_iov->iov_base. net/socket.c 2)sock_recvmsg: 调用函数指针sock->ops->recvmsg()完成在INET Socket层的数据... -
FFmpeg 入门[四] 解码函数及数据结构总结
2018-10-18 16:29:031、大体流程 (1)打开视频文件 (2)获取视频流 (3)得到流的编码器 (4)获取该编码器的具体信息 (5)根据(3)(4)查找编解码器 (6)打开编码器 (7)初始化SDL显示图像需要的环境 (8)读取数据帧 ... -
linux手动注入网络数据_Linux内核 网络数据接收流程图
2020-12-23 11:56:11各层主要函数以及位置功能说明:1)sock_read:初始化msghdr{}的结构类型变量msg,并且将需要接收的数据存放的地址传给msg.msg_iov->iov_base. net/socket.c2)sock_recvmsg: 调用函数指针sock->ops->recvmsg... -
linux 内核网络,数据发送流程图
2011-11-20 20:07:004.2 数据发送流程图 各层主要函数以及位置功能说明: 1)sock_write:初始化msghdr{}结构 net/socket.c 2)sock_sendmsg:net/socket.c 3)inet_sendmsg:net/ipv4/af_net.c 4)tcp_sendmsg:申请sk_bu... -
linux内核网络接收数据流程图【转】
2017-11-15 17:21:00转自:...4.3 数据接收流程图 各层主要函数以及位置功能说明: 1)sock_read:初始化msghdr{}的结构类型变量msg,并且将需要接收的数据存放的地址传给msg.msg_iov->iov_base....
-
用微服务spring cloud架构打造物联网云平台
-
amplify-js-app.zip
-
django 前后端分离 跨域访问
-
光学平面的绝对测量
-
Jsplumb从入门到实战
-
Galera 高可用 MySQL 集群(PXC v5.7+Hapro)
-
具有高k栅极氧化物的高性能沟槽MOS势垒肖特基二极管
-
龙芯实训平台应用实战(希云)
-
基于微光学组件实现的基于差分真实时间延迟的光控相控阵天线的连续角度转向
-
电脑配置也太旧了,这配置配做技术么?、
-
springboot整合JasperReport实现报表功能.zip
-
区块链应用开发实战(Go语言方向)
-
[vue进阶]2021最新vue自定义指令详解
-
Python学习-实现猜拳
-
微信小程序自定义tab,多层tab嵌套实现
-
基于纵横网的3×3自由空间光路由器及其控制算法
-
使用 Linux 平台充当 Router 路由器
-
leetcode--子数组问题--前缀和
-
手写js--forEach
-
MySQL数据库的四种事务隔离级别