算法学习笔记
算法学习笔记
Express学习笔记
Express学习笔记
路由点击跳转至《Express保姆级教程-(1)路由》
算法学习-栈
栈1.介绍栈的特点是“先进先出”,与队列不同,栈只有唯一的一个出入口。
编程中常用的递归就是用栈实现的。栈需要用空间存储,如果栈的深度太大,或者存进 栈的数组太大,那么总数会超过系统为栈分配的空间,就会爆栈导致栈溢出。
编码时通常使用STL stack或者自己手搓。
2. STL stack
操作
说明
stack<Type> s
定义栈,Type 为数据类型
s.push(item)
把item放到栈顶
s.top()
返回栈顶的元素,不会删除
s.pop()
删除栈顶的元素,但不会返回
s.size()
返回栈中元素的个数
s.empty
检查栈是否为空,如果为空则返回true,反之返回false
3.手写栈自己写一个简单的栈。包括一些基本操作:push(),pop(),top(),empty()
1234567891011#include<bits/stdc++.h>const int N = 100100;struct mystack{ char a[N]; int t = 0; void p ...
算法学习-链表
链表链表的特点是用一组位于任意位置的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以不连续。链表分为单向链表和双向链表
使用链表时,可以使用STL list ,也可以自己手搓。先以下列问题为例,给出动态链表,静态链表,STL链表3种方案
约瑟夫问题
问题描述:
动态链表动态链表需要临时分配节点,使用完毕后释放链表节点。动态链表的优点,能及时释放空间,不使用多余内存;缺点是需要管理空间,容易出错
12345678910111213141516171819202122232425262728293031323334353637#include<bits/stdc++.h>struct node { int data; node* next;};void process() { int n, m; // n为节点个数,m为约瑟夫环的报数最高数 cin >> n >> m; node* head, * now , *p; head = new node; now = head; for (int i = 2; ...
C++ STL
C++标准模板库(C++ Standard Template Library)
算法
容器
仿函数
迭代器
1.前言:
STL作为一个封装良好,性能合格的C++标准库,在算法竞赛中及其常见,灵活正确使用STL可以节省很多时间。
不过STL使用很多复杂结构实现丰富的功能,效率可能会比较低
顺序容器
2.2向量vector
#include<vector>
连续的顺序存储结构,与数组一样,但是长度可变
2.2.1常用方法
构造
vector<类型> arr(长度[,初值])
12345678vector<int> vec; //默认构造,长度0vector<int> arr(100); //构造长度100的int数组vector<int> arr(1000,1); //构造长度为1000,初值为1的int数组vector<vector<int>> vec2(5,vector<int>(6,10)); //构造二维数组,5行6列,初值10vector<vector<vector< ...
Express保姆级教程-(2)中间件
中间件概述生活中的例子:在处理污水的时候,一般要经过一下步骤,从而保证处理后的污水能达到排放标准
中间件函数是在应用程序的请求-响应周期中可以访问请求对象、响应对象和next函数的函数
next 函数是Express路由中的一个函数,当被调用时,会在当前中间件之后执行中间件
编写中间件普通中间件中间件函数的示例 myLogger
1234const myLogger = function(req,res,next) { console.log('LOGGED') next()}
注意:在中间件函数的最后需要调用next()函数。这样会调用应用程序的下一个中间件函数。next()可以命名任何名称,因为是函数参数,但是按照惯例,使用’next’约定俗成
定义好中间件,需要挂载中间件,使应用接受请求先处理中间件。
123456789101112131415const express = require('express')const app = express()const myLogger = functio ...
Express保姆级教程-(1)路由
Express初识Express基于Node.js,快速、开放、极简的Web开发框架,与内置的http模块类似
Express的本质:就是一个npm上的第三方包
http内置模块用起来复杂,开发效率低;Express是基于内置的http模块进一步封装出来的
Express能做什么,
Web网站服务器
API接口服务器
使用Express可以调用特定HTTP动词(GET,POST)函数和URL模式(路由)函数,还可以指定模版(视图)引擎种类。
可以使用Express中间件添加对cookie,会话,用户,获取参数等
路由下面是一个Hello World的事例
1234567891011const express = require('express')const app = express()app.get('/',(req,res)=>{ res.send("Hello World")})app.listen(80, ()=>{ console.log('expre ...
租房数据爬虫
租房数据爬取并分析一、实验目的本实验旨在通过Scrapy框架爬取链家网的租房数据,并对数据进行清洗、分析和可视化展示。通过分析不同城市的租金水平、单位面积租金等指标,探讨租金与城市经济指标(如GDP、人均工资)的关系。
二、实验过程1. 数据获取数据获取使用scrapy框架,项目由多个模块构建而成,包括爬虫(spider),中间件(middlewares),管道(pipelines),设置(settings),数据(items)等。如下图所示,为scrapy的基本框架结构
1.2代码分析*lianjia.py*
定义了详细的爬虫类
123456789class LianjiaSpider(scrapy.Spider): name = "lianjia" allowed_domains = ["lianjia.com"] def __init__(self, cities=None, args, kwargs): def start_requests(self):
排序算法-nlogn篇
在众多的排序算法中,我们往往根据不同的需求选择不同的排序算法,从时间复杂度的角度考虑,排序算法中的时间复杂度O(nlogn)是一个算法复杂度较好,且常见的算法策略。
本篇文章,我们来讨论排序算法中的具有O(nlogn)时间复杂度的排序算法。
一、合并排序1、基本思想 合并排序,本质上是采用了分治的策略。所谓分治,即分而治之,将一个复杂的问题分成两个小部分,再对两个小部分分别求解,最后将两个解合并起来得到最终的解。
合并排序的分治策略也很简单。将一个长度为n的序列分成若干部分(本文一般默认为两部分),对这两个部分分别做排序,最后对两个已经排好序的序列结果进行合并。当然,对于分开的两个部分,最理想的情况是分开的这个序列长度为1,这样已经是排好序的。为此,我们采用递归思想,当长度不为1的时候,我们持续分裂成两部分,直至长度为1。
2、基本流程
此处为算法基本流程:
if(长度是否为1)
如果不为1,找到序列中点位置 i
对序列最左端到中点 i 的位置的序列递归排序
对序列 i+1 的位置到序列最右端的序列递归排序
最后 ...