数据结构与算法
数据结构与算法
small_planet
这个作者很懒,什么都没留下…
展开
-
队列缓冲自动冲掉最老的数据
这个问题是由单片机中我想储存记录秒表记录的时间引起的,假如最大只能记录10条时间,再有新的时间记录就会把最先记录的时间给冲掉,这就是一个典型的队列问题。先定义一个队列;#define SIZE 3 //队列里队列元素的个数struct recode{ unsigned char time[14];};struct queue{ unsigned char head; unsigned char tail; struct recode *buff;};struct que..原创 2021-11-22 12:10:14 · 365 阅读 · 0 评论 -
二分查找法全析
二分查找法只适用于已经排好序的一组数的查找,查找速度非常快,时间复杂度为O(log2n)基本算法: 有一个左标志和有标志,每次查找都要根据这两个标志找中间位置,拿中间位置的数和目标值进行比较:中间数 > 目标值 :目标值小,中间数往右的数都比目标值大,继续往左,跟新左标志 right = m-1同理,中间数 <目标值 :自己分析一下左右标志也是判断是否跳出循环的标志,当left <= right 时就有必要再判断在算中间位置是m = left + (...原创 2021-10-07 17:27:52 · 93 阅读 · 0 评论 -
建立动态数组(c语言)
我们在刚开始学数组的时候大都会犯这么一个小错误:int a[n],运行后就会出现bug,也就是说,C语言不允许对数组的大小做动态定义。原创 2020-10-10 11:25:13 · 2079 阅读 · 0 评论 -
冰雹猜想不一样的算法
著名的数学黑洞: 1976年的一天,《华盛顿邮报》于头版头条报道了一条数学新 闻。文中记叙了这样一个故事:70年代中期,美国各所名牌大 学校园内,人们都像发疯一般,夜以继日,废寝忘食地玩弄一 种数学游戏。这个游戏十分简单:任意写出一个自然数x,并且 按照以下的规律进行变换:如果是个奇数,则下一步变成3x+1 。如果是个偶数,则下一步变成x÷2。不单单是学生,甚至连 教师、研究员、教授与学究都纷纷加入。 为什么这种游戏的魅力经久不衰?因为人们发现,无论x是怎样 一个数字,最终都无法逃脱回到谷底1..原创 2020-10-04 11:17:33 · 682 阅读 · 4 评论 -
把数组下标0到t的元素移到最后
方法一:双层循环,直接在要移动的数组中移动修改#include<stdio.h>void f(int a[], int t){ int temp; for (int i = 0; i <= t; i++) { temp = a[0]; for (int j = 0; j<9; j++) { a[j] = a[j + 1]; } a[9] = temp; } for (int i = 0; i < 10; i++) print.原创 2020-10-25 22:02:39 · 360 阅读 · 0 评论 -
排序算法
1.选择排序法 每一轮执行后的a[i]都为剩下未排序的最大值,循环len-1次,结果就是从大到小的结果。#include <stdio.h>int main(){ int a[] = { 2, 6, 5, 8, 9 }, i, j, f, max,len; len = sizeof(a) / sizeof(a[0]); for (i = 0; i < len-1; i++) { f = i; //假设f为这一轮循环最大值的下标 for.原创 2020-08-21 17:13:35 · 89 阅读 · 0 评论 -
大数的取余、求商
#include<stdio.h>#include<string.h>int main(){ int mod=0,b[1000],i=0; char a; while (1) { if ((a = getchar())=='0') break; else { while (a != '\n') { b[i++] = (mod * 10 + a - '0') / 17; mod = (mod * 10 + a - '0')%.原创 2020-10-31 13:07:42 · 164 阅读 · 0 评论 -
判断一个字符串是否为另一个的子序列
方法1:双层循环,复杂度较高int ifzixulie(char *s, int m, char *t, int n){ int i, j,k,f; k = 0; f = 0; for (i = 0; i < n; i++) for (j = k; j<m; j++) { if (t[i] == s[j]) { k = j + 1; f++; break; } } if (f!=n) return 0; else.原创 2020-09-05 13:24:52 · 2433 阅读 · 0 评论 -
链表集合的各种骚操作
上代码:#include<iostream>using namespace std;typedef struct link{ int date; struct link *next;}*pnode,node;bool addyuansu(pnode link,int e) //在链表集合中加入单个元素{ pnode p,a=new node; int f = 1; a->date = e; p = link->next; while (p)原创 2021-01-21 12:07:46 · 109 阅读 · 0 评论 -
数据结构之树的操作大全
我们事先定义如果树结点的数据域为‘#’时,则这个结点为根节点,没有左右孩子,当然也可以直接把这个结点定义为NULL。1、树的类型定义2、三种遍历方式 ①、先序遍历 ②、中序遍历 ③、后序遍历目录1、树的类型定义2、三种遍历方式 ①、先序遍历 ②、中序遍历 ③、后序遍历...原创 2021-04-09 19:43:00 · 2412 阅读 · 0 评论