数据结构与算法
文章平均质量分 60
rugu-sco
记得一定要快乐
展开
-
通讯录--动态开辟内存+文件存储
终极版–增删改查 排序 动态开辟内存 文件存储 addressbook.h#include<stdio.h>#include<stdlib.h>#include<memory.h>#include<assert.h>#include<string.h>#define DEFAULT_SZ 3//初始通讯录大小为3...原创 2018-03-15 20:17:54 · 273 阅读 · 0 评论 -
二叉搜索树的基本操作(递归和非递归)
二叉搜索树任意一个节点的左孩子小于它, 右孩子大于它 二叉搜索树的中序遍历结果是有序的基本操作初始化插入节点查找节点删除节点头文件/*================================================================# File Name: binary_search_tree.h# Author: rjm...原创 2018-05-17 19:39:55 · 243 阅读 · 0 评论 -
二叉树的基本操作
二叉树的基础知识一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树的二叉树组成的二叉树的特点每个结点最多有两棵子树,即二叉树不存在度大于2的结点,二叉树的子树有左右之分,其子树的次序不能颠倒满二叉树&amp;amp;完全二叉树满二叉树在一棵二叉树中,如果所有分支结点都存在左子树和右子树, 并且所有叶子节点都在同一层上,则称...原创 2018-04-28 11:20:14 · 280 阅读 · 0 评论 -
堆的基本操作
堆的性质首先, 这个堆和堆栈那个堆没有一点关系 这个堆就是一棵完全二叉树 分为大堆和小堆 满足以下性质 如果是大堆, 那么任意根节点的孩子节点都比它小 如果是小堆, 那么任意根节点的孩子节点都比它大 堆的基本操作初始化插入删除取堆顶元素销毁堆排序我们每次插入完或者删除完以后, 这个堆仍然要满足堆的性质, 所以就需要在插入删除以后再做一些操作, 使元素上...原创 2018-05-13 16:04:04 · 205 阅读 · 0 评论 -
哈希表的基本操作
哈希表若关键字为k,则其值存放在f(k)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f()为散列函数,按这个思想建立的表为散列表(即哈希表).对不同的关键字可能得到同一散列地址,即k1≠k2,而f(k1)=f(k2) 这种现象称为碰撞散列函数能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位.散列函数有很多种 常用的有:直接...原创 2018-05-20 21:20:38 · 3564 阅读 · 0 评论 -
连续子数组的最大和
连续子数组的最大和问题例如: 给一个数组(3, -1, 2, 4) 输出结果为6, 即为2+4解法一: 暴力求解 对数组内每一个数进行遍历,然后遍历以它们为起点的子数组,比较各个子数组的和,找到和最大的连续子数组#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>// 连续子数组求和的最大值int ar...原创 2018-05-22 15:56:23 · 132 阅读 · 0 评论 -
位图与布隆过滤器
位图用来快速判断一个整数是否在一堆整数中 二进制用0和1来表示数据,位图根据0和1来存储对应的数据,可以大大节省存储空间,并具备排序特性。例如数组:int arr[ ] = {1,31,53,41,79,201}创建字符数组 int bitmap[26](因为数字最大数201,26 * 8=208 &lt; 201)遍历字符数组的每一位,设置 0 或者 1通过设置 0 或者...原创 2018-06-02 20:56:12 · 1889 阅读 · 0 评论 -
海量数据处理
海量数据处理首先熟悉一下进制转换计算机最小单位 bit, 也就是 0 和 1 8 个 bit 为一个字节 byte 1024 个 byte 为 1 KB 1024 K 为 1 MB 1024 M 为 1 GB …一. 给定一个大小超过 100G 的文件, 其中存在 IP 地址, 找到其中出现次数最多的 IP 地址(hash文件切分).解决方案: (1) 采用Has...原创 2018-06-03 09:42:19 · 220 阅读 · 0 评论 -
基本排序算法
冒泡排序基本步骤:从第一个元素开始, 依次比较相邻两个元素的大小, 如果前面的大于后面的, 就交换, 交换完, 此时, 最后一个元素就是最大的.然后除了最后一个元素, 其余元素再重复以上步骤直到需要比较的元素越来越少, 只剩最后一个, 此时就有序了.///////////////////////////////////////////////// 1, 冒泡排序// ...原创 2018-05-29 20:54:19 · 215 阅读 · 0 评论 -
栈和队列经典试题
01.实现一个栈,要求实现Push、Pop、Min(返回最小值)的时间复杂度为O(1)思路:我们知道取栈顶元素的时间复杂度为O(1), 如果栈顶元素就是最小的就好了,所以我们每次入栈之前, 先与栈顶元素比较如果大于栈顶元素, 就把栈顶元素保存一份, 先入栈要入栈的元素, 再入栈栈顶元素如果小于栈顶元素就直接入栈两次这个元素同样, 出栈也要每次出两个元素例如:要入栈的是5, 当前栈顶元...原创 2018-04-12 14:30:34 · 811 阅读 · 0 评论 -
带头结点的带环双链表的基本操作
dblinklist.h//带头结点的带环双链表#include<stdio.h>#include<stdlib.h>#define DataType char#define TESTHEAD printf("\n=======%s=======\n", __FUNCTION__);typedef struct dblinklist{ Data...原创 2018-04-05 13:38:09 · 232 阅读 · 0 评论 -
通讯录--动态开辟内存版
和上次的通讯录差不多,只是上次固定了通讯录的容量,这次加入了动态开辟内存,在容量不够时申请空间。 addressbook.h#include<stdio.h>#include<stdlib.h>#include<memory.h>#include<assert.h>#include<string.h>#def...原创 2018-03-13 19:06:43 · 196 阅读 · 0 评论 -
C语言小项目--通讯录
一个简单的通讯录程序 AddressBook.h#include<stdio.h>#include<stdlib.h>#include<memory.h>#include<assert.h>#include<string.h>#define MAX_SIZE 1000struct people{ ...原创 2018-03-11 20:48:39 · 427 阅读 · 0 评论 -
数据结构--顺序表
C语言实现顺序表 增 删 改 查 排序#include<stdio.h>#include<stdlib.h>#include<memory.h>#include<assert.h>#define MAX_SIZE 10typedef int DataType;//定义一个顺序表typedef struct SeqLis...原创 2018-03-10 21:34:23 · 178 阅读 · 0 评论 -
单链表的基本操作
数据结构-单链表-基本操作-C语言实现 LinkList.h#include<stdio.h>#include<stdlib.h>#define TEST_HEAD printf("=====%s=====\n", __FUNCTION__);typedef int ElemType; typedef struct LinkList{ ...原创 2018-03-20 14:59:22 · 281 阅读 · 0 评论 -
栈的两种实现
顺序表实现栈#include <stdio.h>#include <stdlib.h>//顺序表实现栈#define TEST_HEAD printf("\n======%s======\n", __FUNCTION__);#define DEFAULT_SZ 5typedef char DataType;typedef struct seqSt...原创 2018-04-08 13:03:08 · 203 阅读 · 0 评论 -
队列的两种实现
顺序表实现队列#include <stdio.h>#include <stdlib.h>//顺序表实现队列#define TEST_HEAD printf("\n=====%s=====\n", __FUNCTION__)#define DEFAULT_SZ 5typedef char DataType;typedef struct seqQu...原创 2018-04-08 19:44:49 · 242 阅读 · 0 评论 -
单链表经典试题
逆序打印单链表void LinkListReversePrint(LinkNode* head); 思路:使用递归, 通过栈的后进先出特性, 实现单链表的逆序输出不允许遍历链表, 在 pos 之前插入void LinkListInsertBefore(LinkNode** head, LinkNode* pos, ...原创 2018-03-27 19:52:13 · 550 阅读 · 0 评论 -
栈的应用 -- 迷宫求解
迷宫求解0 0 1 0 0 00 0 1 1 1 01 1 1 0 1 10 0 1 0 1 00 0 1 1 1 10 0 0 0 0 0如上图所示的一个迷宫, 0为墙, 1为路, 编写程序求解1) 求简单迷宫是否存在路径 2) 求多出口迷宫的最短路径 3) 求带环的多出口迷宫的最短路径思...原创 2018-04-17 16:22:01 · 3213 阅读 · 0 评论 -
时空复杂度分析
时空复杂度分析数据结构和算法要解决的问题就是让代码运行得更快 , 让存储空间占得更少 , 所以时间和空间复杂度的分析是很重要的 .那么究竟该如何分析 ?大 O 复杂度表示法我们经常会看到 O(1) O(n) O(logn) 这些时空复杂度的表示其实这就是 大 O 复杂度表示法 , 它并不表示代码执行真正需要的时间 , 而是一种随着数据规模增长的趋势 , 其中 n 就是数据规模的大小 ....原创 2018-10-03 15:31:44 · 1765 阅读 · 0 评论