
数据结构
WangJ_F_
这个作者很懒,什么都没留下…
展开
-
时间复杂度与空间复杂度如何计算
如何衡量一个算法的复杂度?· 时间复杂度 · 空间复杂度 统称为算法复杂度! 时间复杂度下列程序会执行多少次?void Test(int n) { int iConut = 0; for(int i = 0; i < n; ++i) { for(int j = 0; j < n; ++j) { iCount++; } } for(int原创 2018-04-11 19:22:43 · 554 阅读 · 0 评论 -
数据结构:堆的应用1:优先级队列 2: 实现堆排序 3:海量数据topK问题
首先是堆的实现堆代码实现: 点击打开链接用堆实现优先级队列以堆的代码为基础实现:如果我们给每个元素都分配一个数字来标记其优先级,可以设置较小的数字具有较高的优先级(也可以设置较大的数字),这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了。所以,我们就引入了优先级队列 这种数据结构。 优先级队列...原创 2018-06-02 19:31:45 · 368 阅读 · 0 评论 -
二叉树及二叉树的基本操作(递归与非递归)
树是由一个或多个结点组成的有限集合,其中:⒈必有一个特定的称为根(ROOT)的结点;⒉剩下的结点被分成n>=0个互不相交的集合T1、T2、......Tn,而且, 这些集合的每一个又都是树。树T1、T2、......Tn被称作根的子树(Subtree)。树的递归定义如下:(1)至少有一个结点(称为根)(2)其它是互不相交的子树1.树的度——也即是宽度,简单地说,就是结点的分支数。以组成该树各...原创 2018-05-22 17:33:03 · 521 阅读 · 0 评论 -
数据结构:带环迷宫如何求最短路径(栈)
遇到下一位为1,或者下一位置大于当前位置,则为通路向后走是,将前一个节点值+1,标记节点按照上-左-右-下的顺序简单迷宫实现:栈结构实现:迷宫出口判断 - 优快云博客 https://blog.youkuaiyun.com/W_J_F_/article/details/80165506 递归实现迷宫:数据结构:递归实现简单迷宫 - 优快云博客 https://blog.youkuaiyun.com/W_J_F_/...原创 2018-06-03 14:41:54 · 518 阅读 · 0 评论 -
1使用两个栈实现一个队列 2 使用两个队列实现一个栈 3 判断入栈顺序的合法性
使用两个栈实现一个队列:如图所示数据入栈,队列是队尾进数据,队头删数据,而在栈中,我们无法在对头删除数据,因此,需要把S1里的n-1个数据放到S2中,然后删除S1中的数据,在将S2中的数据放回到S1中。 stack.c#include"stack.h"void stackinit(stack *s){ assert(s); s->_size = 0;}void stackpus...原创 2018-05-16 17:54:05 · 293 阅读 · 0 评论 -
数据结构:堆的基本操作 及 可以选择大小堆的优化堆
堆是可以理解为特殊的数据结构,每个结点都有一个值。是指二叉堆。 堆的特点是根节点的值最小(或最大),且根结点的两个子树也是一个堆 堆就是用数组实现的二叉树,所有它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置 堆分为大根堆,小根堆,大根堆就是树的根结点值最大,小根堆就是树的根结点值最小。Heap.h#pragma once#include<...原创 2018-05-31 17:00:02 · 508 阅读 · 0 评论 -
数据结构:二叉搜索树递归与非递归的实现 及性能,AVL,红黑树分析
二叉搜索树二叉查找树(Binary Search Tree),(二叉搜索树 或 二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉树实现:二叉树及二叉树的基本操作(递归与非递归) - W_J_F_的博客 ...原创 2018-06-09 16:18:55 · 428 阅读 · 0 评论 -
数据结构:单链表相关面试题
单链表基本功能实现:https://blog.youkuaiyun.com/W_J_F_/article/details/80007864ListNode.h// 逆序打印单链表 void PrintSListFromTail(pNode pHead);// 删除链表的非尾结点,要求:不能遍历链表 void DeleteListNotTailNode(pNode *pHead, pNod...原创 2018-08-06 15:10:32 · 258 阅读 · 0 评论 -
数据结构:哈希散列结构理解及位图的使用
目录哈希概念哈希冲突哈希函数常见哈希算法处理哈希冲突闭散列线性探测二次探测开散列哈希变形—位图布隆过滤器哈希概念顺序搜索以及二叉树搜索树中,元素存储位置和元素各关键码之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。搜索的效率取决于搜索过程中元素的比较次数。理想的搜索方法:可以不经过任何比较,一次直接从表中得到...原创 2019-01-18 17:54:51 · 1126 阅读 · 0 评论 -
数据结构:八大排序理解与C语言实现
目录序插入排序直接插入排序希尔排序选择排序直接选择排序堆排序交换排序 冒泡排序快速排序归并排序非比较算法计数排序时间复杂度序排序:就是将一组杂乱无章的数据按照一定的规律(升序或降序)组织起来。 排序码:通常数据元素有多个属性域,其中有一个属性域可用来区分元素,作为排序依据,该域即为排序码。 按照主排序码进行排序,排序的结果是...原创 2019-01-18 23:57:42 · 1052 阅读 · 0 评论 -
两种方式实现一个栈,要求实现Push(栈)、Pop(入栈)、Min(返回最小值)的时间复杂度为O(1)
实现一个栈,要求实现Push(栈)、Pop(入栈)、Min(返回最小值)的时间复杂度为O(1)1: 如图,入栈时每次入栈两个元素。即入栈的数据与当前的最小值,将两个元素封装为一个结构体,返回时直接返回结构体中的最小值min,便可实现返回最小值的时间复杂度为O(1);stack.h#pragma once#include<stdio.h>#includ...原创 2018-05-15 00:27:32 · 345 阅读 · 0 评论 -
数据结构:递归实现简单迷宫
先标记进来的点2,入栈,递归形成子问题——如何走剩下的迷宫?从入口点向四周试探,如果任意一个方向走成功了,就return 1,也就是整个迷宫就有解了,如果这个方向走失败了,说明这个方向以后不论怎么走都失败,要出栈这个结点。当四个方向全失败了,出栈入口点,并返回0.栈结构实现:简单迷宫出口判断 - 优快云博客 点击打开链接数据结构:静态栈与动态栈的实现 - 优快云博客 点击打开链接Stac...原创 2018-05-07 23:51:24 · 983 阅读 · 0 评论 -
数据结构:动态顺序表,顺序表与单链表的比较
SepListD.h#pragma once#include<stdio.h>#include<stdlib.h>#include<assert.h>typedef int DataType;typedef struct SeqListD{DataType* _pData;//数据块指针int _size;//有效数据个数int _ca...原创 2018-04-15 20:48:04 · 560 阅读 · 0 评论 -
数据结构:单链表功能实现及面试题整理
序:调用函数时,其实就是把变量的地址传给函数,但是函数只能修改指针指向变量的值,不能修改指针的指向如果需要修改指针的指向就必须在传参时传指针的指针!比如:单链表在遍历,查找时就不需要改变指针指向,插入删除就必须改变指针指向为了保证代码质量,我将所有的函数都使用指针的指针形式先附上运行结果:ListNode.h#pragma once#include<st...原创 2018-04-19 17:15:38 · 323 阅读 · 0 评论 -
结构体的理解(创建,初始化,内存对齐,位段,枚举,联合)
1:结构体类型创建 2:结构体初始化 3:结构体内存对齐 4:位段,位段计算机大小。 5:枚举+联合。 struct 结构体名{ 结构体所包含的变量或数组 }; 结构体的成员包括: 标量,数组,指针,其他结构体。结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员原创 2018-04-20 01:07:48 · 670 阅读 · 0 评论 -
简单的通讯录实现教程
实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 7. 以名字排序所有联系人思路:将此次函数实现分为3个模块,1.头文件部分。2.主函数测试部分 3.函数实现部分首先我们可以分三个模块来解决这个...原创 2018-04-24 17:48:14 · 971 阅读 · 0 评论 -
栈结构实现:迷宫出口判断
利用栈实现迷宫:首先判断入口是否合法。入栈,保存栈顶位置并判断是否为出口。走过的位置标记为2。如果不是出口,依次向上-左-右-下 的方向判断是否走得通,走不通可返回,返回时标记为3.若是四个方向都走不通,说明迷宫无出口!stack.h#pragma once#include <assert.h>#include <stdio.h>#include <stdlib...原创 2018-05-02 13:51:58 · 793 阅读 · 0 评论 -
数据结构:用静态栈实现检测括号是否匹配
算法:检测表达式中的字符,若是左括号就入栈,如果是右括号就出栈一个元素与其配对,配对成功则继续访问下一个字符,否则退出。出现非括号字符则跳过。#include"Stack.h"int main(){ Stack S; int i = 0; char str[MAX_SIZE]; printf("请输入表达式:"); gets(str);//从控制台获取字符串赋值给s原创 2018-04-26 07:59:40 · 356 阅读 · 0 评论 -
数据结构:静态栈与动态栈的实现
#pragma once#include<stdio.h>#include<stdlib.h>typedef int DataType;#define MAX_SIZE 100typedef struct Stack{ DataType _arr[MAX_SIZE];//栈的元素最大个数 int _top;//栈顶 int _bottom;//栈低 i...原创 2018-04-25 17:02:58 · 1779 阅读 · 0 评论 -
数据结构:(两种方式)一个数组实现两个栈(共享栈)
奇偶栈!stack.h#pragma once#include<stdio.h>#include<assert.h>#include<stdlib.h>#define MAX_SIZE 10typedef int DataType;typedef struct stack{ DataType _arr[MAX_SIZE]; int _to...原创 2018-05-18 18:12:06 · 741 阅读 · 0 评论 -
数据结构:队列的顺序表与链表的两种C语言实现
队列的基本概念 队列 (Queue) :是一种先进先出 (First In First Out ,简称 FIFO) 的线性表。只允许在表的一端进行插入,而在另一端进行删除。 队首 (front) :允许进行删除的一端称为队首。 队尾 (rear) :允许进行插入的一端称为队尾。基本操作void queue_init(queue *q);//初始化void qu...原创 2018-05-12 21:57:39 · 767 阅读 · 0 评论 -
数据结构静态顺序表
顺序表:用一段地址连续存储单元依次存储数据元素的线性结构 //seqlist.h#pragma once//防止头文件重复包含#define MAX_SIZE 10#include<assert.h>#include<stdio.h>#include<stdlib.h> 实现基于静态数组的顺序表的以下基本操作: 首先先定义一个结构体...原创 2018-04-10 00:13:03 · 489 阅读 · 0 评论