![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 73
superwangxinrui
这个作者很懒,什么都没留下…
展开
-
无头单链表基本操作的实现
首先. 看一下我们要实现的基本功能;,实现以下链表的基本操作typedef int DataType;typedef struct Node{ struct Node* _pNext; DataType _data;}Node, *PNode;//////////////////不带头结点的单链表//////////////////////////////////////// .h// 链表初始化...原创 2018-03-27 17:42:45 · 809 阅读 · 0 评论 -
排序算法总结之冒泡排序
冒泡排序算法的原理如下(升序,降序同理): 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数,所以每一趟冒泡排序就会将最大的数排到最后,也就是将一个元素排到指定位置,所以,总结出总共要冒的次数为 sz-1 次(其中sz为元素个数)。 针对所有的元素重复以上的步骤,除了...原创 2018-08-10 20:46:19 · 547 阅读 · 0 评论 -
数据结构之堆
1. 实现堆的以下接口:typedef struct Heap{ DataType* _array; int _capacity; int _size;}Heap;// 创建堆void CreateHeap(Heap* hp, DataType* array, int size);// 在堆中插入值为data的元素void InsertHeap(Heap* hp, DataType data);/...原创 2018-05-15 14:49:12 · 291 阅读 · 0 评论 -
数据结构之二叉搜索树
1. 二叉搜索树的概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值,若它的右子树不为空,则它右子树上所有节点的值都大于根节点的值,它的左右子树也分别为二叉搜索树。2. 二叉搜索树实现---> 循环typedef int DataType;typedef struct BSTreeNode{ str...原创 2018-05-15 14:33:41 · 243 阅读 · 0 评论 -
数据结构之队列
1. 队列的基本概念 只允许在一端进行插入数据操作(队尾),在另一端进行删除数据操作(队头)的特殊线性表。队列具有先进先出的特性。2. 队列存储结构顺序队列: 队头指针不动----要大量搬移元素(出队列时所有元素向前移动) 队头指针移动----存在假溢出 循环队列 循环队列如何解决队列空或者满?(三种方法...原创 2018-04-25 15:38:01 · 168 阅读 · 0 评论 -
经典面试题之单链表实现约瑟夫环(杀人游戏)
算法原理约瑟夫环运作如下:1、一群人围在一起坐成[2] 环状(如:N)2、从某个编号开始报数(如:K)3、数到某个数(如:M)的时候,此人出列,下一个人重新报数4、一直循环,直到所有人出列[3] ,约瑟夫环结束下来我们用单链表来实现约瑟夫环: 解决思路: 首先单链表本身不是一个环,所以第一步要构环,第二步实现报数,第三步将报到某个数的节点删除,直到环中剩下一个节点或者没有节点为止,第三步解...原创 2018-04-02 18:52:37 · 1112 阅读 · 0 评论 -
链表经典面试题之从尾到头打印单链表
题目: 要求将一无头单链表的节点从尾到头打印出来。这是一道经典的面试题,今天我们来介绍它的五种解决方法。1 解决思路: 定义两个指针,一个指向链表头(pcur),一个指向每次要打印的节点(pprint)。每次让pcur来遍历,代码实现如下://从尾到头打印单链表void THprint2(PNode pHead){ if (NULL == pHead){ return; } P...原创 2018-04-02 18:13:58 · 366 阅读 · 0 评论 -
栈的应用之后缀表达式(逆波兰表达式)求值
要使用栈来实现逆波兰表达式的求值,就得先实现一个栈,并实现栈的一些基本操作:首先1. 实现栈的如下接口typedef char DataType;typedef struct Stack{ DataType array[MAX_SIZE]; int _top; // 表示有效元素个数 表示栈顶位置}Stack;//初始化栈void StackInit(Stack* s);// 入栈void ...原创 2018-04-08 16:42:56 · 415 阅读 · 0 评论 -
C语言实现静态顺序表的功能(增,删,查,改,以及排序)
首先在头文件中声明要实现的功能;标头.h#ifndef game_h#define game_h#define MAX_SIZE 10 typedef unsigned int size_t;typedef int DataType;typedef struct SeqList{ DataType _array[MAX_SIZE]; int _size; // 顺序表中有效元素的...原创 2018-03-21 16:24:29 · 417 阅读 · 0 评论 -
解析二分查找时间复杂度
话不多说,先来段二分查找的代码。#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>int BinSearch(int arr[], int sz, int key){//找到返回下标,找不到返回-1 int left = 0; int right = sz - 1; while (left <= right){ int...原创 2018-03-20 15:44:33 · 2185 阅读 · 0 评论 -
以斐波那契数列为例分析递归算法的时间复杂度和空间复杂度
首先来波概念: 递归算法的时间复杂度:递归的总次数*每次递归的数量。 递归算法的空间复杂度:递归的深度*每次递归创建变量的个数。 那什么是斐波那契额数列呢?对于菲波那切数列有典型的生兔子的的问题,在这我就不多说了,感兴趣的同学可以自行查找资料来了解,简单的说,菲波那切数列数列就是前两项是1,后面的每项是其前两项之和。比如:1 1 2 3 5 8 13.... 下...原创 2018-03-20 18:46:21 · 41672 阅读 · 7 评论 -
实现动态顺序表的以下接口
实现动态顺序表的以下接口:typedef int DataType;typedef unsigned int size_t;typedef struct SeqListD{DataType* _array;size_t _capacity; // 底层空间的大小size_t _size; // 有效元素的个数}SeqListD, *PSeqListD;///////////////////////...原创 2018-03-23 11:37:57 · 217 阅读 · 0 评论 -
海量数据处理问题
1 给一个超过100G大小的log file,log 中存着ip地址,设计算法找到出现次数最多的ip地址 首先看到100G的日志文件,我们的第一反应是太大了,根本加载不到内存,更别说设计算法了,那么怎么办呢?既然装不下,那么我们是不是可以将其切分开,一小部分一小部分轮轮流进入内存呢,也就是所谓的分治法。如果我们将其分为1000个文件,那么每个文件也就是100M左右,将每个文件依次载...原创 2018-08-20 21:13:41 · 384 阅读 · 0 评论