数据结构
ypw44
成为自己最想成为的人~
展开
-
插入排序算法详细剖析
插入排序分为:直接插入排序,折半插入排序,希尔排序。这里我们主要分析最简单的:直接插入排序自如其意,插入排序,就是每次读入一个元素的时候,在已经有序的序列中找到他应该插入的位置,然后插入保证当前序列还是有序,如此只能所有的元素都插入完毕。int a[maxn],n;void insertSort(){ for(int i=2;i<=n;i++){ int temp = a[i],j = i; whlie(j>1 && temp原创 2021-06-14 18:31:10 · 227 阅读 · 0 评论 -
选择排序算法详细剖析
选择排序的基本思想是:每一趟(比如说第i趟)在后面n-i+1个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做完,待排序元素只剩下一个,就停止我们这里还拿从小到大排序来讲解。void selectSort(){ for(int i=1;i<=n;i++){ int k = i; for(int j=i;j<=n;j++){ if(a[i] < a[k]){原创 2021-06-14 18:20:48 · 124 阅读 · 0 评论 -
冒泡排序算法详细剖析
首先我们要知道一个前提知识 ,冒泡排序 属于 交换排序 的一种。那么什么是交换排序?答:根据序列中两个关键字的大小的比较结果来决定是否交换这两个记录在序列中的位置。冒泡排序的思想:1.当我们拿到一个混乱无序的序列的时候,我们可以从前往后依次两两比较相邻元素的值。这里我们假定想要序列从小到大排列。那么每次对比 a[i-1] 与 a[i],若a[i-1] > a[i] 。那么我们就交换这两个元素的位置。原序列:2 5 4 3 1对比 2 < 5 不做处理对比 5 > 4 交换,原创 2021-06-14 12:06:32 · 222 阅读 · 0 评论 -
《数据结构高分算法笔记》3.6小节——入门模拟->字符串处理
1. A.字符串连接2. 首字母大写4. 字符串的查找删除5. 单词替换6. 字符串去特定字符7. 数组逆置8. 比较字符串9. 编排字符串10. 【字符串】回文串A#include<bits/stdc++.h> using namespace std; int main(){ string s1,s2; while(cin>>s1>>s2){ cout<<s1<<s2<<en原创 2021-06-13 17:11:08 · 111 阅读 · 1 评论 -
算法3-7:银行排队
题意:就是多个窗口服务,每次来的人选择一个等待时间最短的窗口。问所有人的平均等待时间思路:拿到这题有没有感觉像一个队列。就是先进队的先服务,然后完事了才能挨到下一个,否则就在外面排队等待。只不过这里是多个队列。因为我们有多个窗口。那么我们其实可以用一个一位数组来记录每个窗口服务最后的那个时间节点。那么每次一个顾客来了,让他先选择一个等待时间最短的那个窗口。然后就是判断顾客是需要等待还是当前窗口根本就没人。要等待的话我们就是sum加上等待时间。然后更新这个窗口的时间节点。否则我们就直接更新当前窗口服务节.原创 2021-03-20 22:30:44 · 2340 阅读 · 0 评论 -
c++字符串函数 --- substr()函数的用法
有关字符串截取函数的用法老不清晰。却总会时不时用到。例如蓝桥杯的一个大题想着用字符串截取函数substr()函数跑暴力匹配。结果却用错了…简单记录下substr()函数的参数表示#include<string>#include<iostream>using namespace std;int main(){ string s("12345asdf"); string a = s.substr(0,5); //获得字符串s中从第0位开始的长度为5的字符串原创 2021-03-20 21:01:48 · 424 阅读 · 0 评论 -
C语言问题-数据结构-迷宫问题
小叙:好长时间没写代码,确实有点生疏了。准备考研中,复习数据结构就想着我可以借此练练代码,刷一个数据结构专题。题目·链接题意:很直白一个BFS问题。思路:具体见代码我们首先要理解宽搜的精髓。然后就是用一个队列,存下坐标以及当前路径长度。形象的来说就是像水波纹一样的扩散,中心就是起点,然后波纹不断扩大,途中遇见终点我们就停下来。那么对于同一圆环(题中相当于四个方向),半径一样(路径长度一样)。具体还是得自己多体会啊!打卡,高数,英语,数据结构复习第一天。#include<bits/s原创 2021-01-21 21:55:11 · 495 阅读 · 3 评论 -
题目 1676: 算法2-8~2-11:链表的基本操作
题意:根据题意,意思就是实现插入,删除,展示,以及得到元素,并判断是否删除加入成功以及表内元素是否为空。思路:一开始觉得跟昨天那个题一样,只不过加上一些判断,所以就着手用数组来写了!但是TLE了重要的事情说三遍,数组写的不对,下面链表那个才对!有想理解下数组写法的思路的可以看看代码如下:#include<bits/stdc++.h>#define maxn 10010using namespace std;int a[maxn];int b[maxn];int main.原创 2021-03-01 15:19:18 · 404 阅读 · 0 评论 -
题目 1675: 算法2-3~2-6:Big Bang
题意:题目的意思就是insert 是在一个地方插入一个字符串,然后delete是删除一个字符串,show是展示当前存在的所有字符串,然后search 是查找字符串然后输出字符串存在的序号。思路:我们要插入字符串的话,需要给他腾出一个空间,并且其余的都往后移动一格,所以我们先遍历移动腾出空间然后我们在把需要插入的字符串插入。我们删除字符串的话跟插入差不多,我们要先找到,不过删除并不是实际意义上的删除,而是当前要删除的那个元素的后一个,往前面移动将其覆盖!展示的话就是遍历输出即可查找的话也就是遍历找.原创 2021-02-28 12:08:56 · 260 阅读 · 0 评论 -
题目 1674: 算法2-2:有序线性表的有序合并
思路:最直接的思路就是所有数据放到一个数组后再排序输出即可#include<bits/stdc++.h>#define maxn 10010using namespace std;int a[maxn];int b[maxn];int main(){ int n,m; while(cin>>n){ for(int i=0;i<n;i++) cin>>a[i]; cin>>m; for(int i=n;i<n+m;i++) .原创 2021-02-27 14:43:15 · 539 阅读 · 2 评论 -
题目 1673: 算法2-1:集合union
题意:就是求A和B的并集,然后就是输出n行。每次输出一下。思路:那么我们用最简单方法来做的话,复杂度是O(n^n)。#include<bits/stdc++.h>#define maxn 10010using namespace std;int a[maxn];int b[maxn];int c[maxn];int main(){ int m,n; while(cin>>m){//多次输入 for(int i=0;i<m;i++) cin&g.原创 2021-02-26 10:52:40 · 385 阅读 · 1 评论