![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
丿寒风
网易游戏3年,游戏创业4年,3D设计软件架构师4年...
展开
-
算法与数据结构基数1:C++实现动态数组
知识点:运算符重载,动态分配内存// array.h#include <iostream>#include <cstring>#include <cstdlib>using namespace std;class Array{public: // **************************************...原创 2014-11-24 21:34:17 · 1398 阅读 · 0 评论 -
冒泡排序及两种优化方式
定义:每一趟依次比较相邻的两个数,将小数放在前面,大数放在后面,直到一趟只剩下一个元素。时间复杂度:O(n^2)。冒泡排序是最常用的小型数据排序方式,下面是用C语言实现的,及其两种优化方式。第一种优化方式是设置一个标记位来标记是否发生了交换,如果没有发生交换就提前结束;第二种优化方式是记录最后发生交换的位置,作为下一趟比较结束的位置。#include原创 2015-08-21 22:51:01 · 14187 阅读 · 2 评论 -
直接插入排序的两种实现方式
定义:每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。时间复杂度:O(n^2)#include void printArray(int arr[], int n) { int i = 0; for (i = 0; i < n; ++i) { printf("%d ", arr[i]); } print原创 2015-09-03 16:48:26 · 1057 阅读 · 0 评论 -
《数据结构与算法分析》引论:选择问题实现
在《数据结构与算法分析——C语言描述》的引论中有提到一个问题:设有一组N个数而要确定其中第k个最大者。被称为选择问题(selection problem)。后面有提到两种算法,下面是我根据描述,写的代码:/* * 来源:《数据结构与算法分析》引论 * 题目:选择性问题,从N个数中找出第k大者 * * */#include #include /** 输出数组*原创 2015-08-21 20:48:41 · 1385 阅读 · 0 评论 -
算法与数据结构基础10:C++实现——拓扑排序
一 定义拓扑排序是对有向无环图(Directed Acyclic Graph简称DAG)顶点的一种排序,它使得如果存在一条从顶点A到顶点B的路径,那么在排序中B出现在A的后面。二 先决条件能够进行拓扑排序图有两个先决条件:有向、无环,即有向无环图。三 偏序全序连通图:任意两点之间都存在至少一条边偏序:非连通图(有向无环图满足偏序关系)全序:单连通图原创 2014-12-08 21:11:47 · 5226 阅读 · 0 评论 -
算法与数据结构基础9:C++实现有向图——邻接矩阵存储
邻接矩阵的存储比邻接表实现起来更加方便,也更加容易理解。邻接矩阵就是用一个二维数组matrix来存储每两个点的关系。如果两个点m,n之间有边,将数组matrix[]m[m]设为1,否则设为0。如果有权,则将matrix[m]n[]设为权值,定义一个很大或者很小的数(只要不跟权值冲突即可),表示不相连。空间复杂度为O(V^2),适合比较稠密的图。邻接表O(V+E),适合比较稀疏的图。原创 2014-12-06 14:58:25 · 5573 阅读 · 0 评论 -
算法与数据结构基础8:C++实现有向图——邻接表存储
前面实现了链表和树,现在看看图。链表是一对一的对应关系;树是一对多的对应关系;图是多对多的对应关系。图一般有两种存储方式,邻接表和邻接矩阵。先看邻接表。邻接表就是将图中所有的点用一个数组存储起来,并将此作为一个链表的头,链表中保存跟这个点相邻的点(边点),如果有权值,则在边点中增加一权值字段。因此,有向图邻接表的空间复杂度为O(v+e),无向图加倍。原创 2014-12-06 11:59:07 · 12227 阅读 · 2 评论 -
常用算法之交换两个数的值
交换两个变量的值,古老的话题,下面把各种方法做个总结。为了方便,先定义两个变量。int a = 1;int b = 2;一 借助临时变量1 交换变量值int tmp;tmp = a; // tmp = 1a = b; // a = 2b = tmp; // b = 12 交换地址int *p; p = &a; // tmp->1 a = &原创 2014-10-31 09:03:38 · 1808 阅读 · 3 评论 -
算法与数据结构基础4:C++二叉树实现及遍历方法大全
binary search tree,中文翻译为二叉搜索树、二叉查找树或者二叉排序树。简称为BST。本文集齐了二叉树的五大遍历算法:前序遍历、中序遍历、后序遍历、广度优先遍历。// BSTree.h#include <cstdio>#include <iostream>#include <stack>#include <qu...原创 2014-12-04 00:10:49 · 2382 阅读 · 0 评论 -
算法与数据结构基础2:C++String类的实现
废话少说,拒绝前奏,直接高潮,且看代码:// String.h#include #include #pragma warning(disable : 4996)using namespace std;class String{public: // **************************************************************原创 2014-11-25 02:18:09 · 1252 阅读 · 0 评论 -
算法与数据结构基础6:C++队列的简单实现
队列也是基于队列,弄懂了队列,队列就很好懂了// Queue.h#include #include #include using namespace std;class Queue{public: // ************************************************************************** // 类的原创 2014-12-04 00:59:37 · 1309 阅读 · 0 评论 -
算法与数据结构基础5:C++栈的简单实现
堆栈是基于队列的,只需要要稍微改一下就ok了,把代码贴在下面// Stack.h#include #include #include using namespace std;class Stack{public: // *************************************************************************原创 2014-12-04 00:52:11 · 1225 阅读 · 0 评论 -
算法与数据结构基础7:C++双链表的简单实现
双链表在单链表的基础上加了一个指向前一个节点的指针。// DList.h#include #include #include using namespace std;class DList{public: // ************************************************************************** /原创 2014-12-04 10:18:04 · 1124 阅读 · 0 评论 -
算法与数据结构基础3:C++单链表类的简单实现
简单的单链表实现,数据类型定义成了int,如果要通用,需要改成模板类,然后稍微修改下就可以了。// List.h#include #include #include using namespace std;class List{public: // **************************************************************原创 2014-12-01 18:34:26 · 1411 阅读 · 0 评论 -
算法与数据结构基础11:C++实现——二叉搜索树节点删除
基于我的另一篇文章《算法与数据结构基础4:C++二叉树实现及遍历方法大全》 ,二叉树的结构用的这篇文章里的。二查找叉树的删除可以细分为三种情况:1 被删除的是叶子节点,直接删除;2 被删除只有一个子节点,指针下移;3 有两个子节点,为了不破坏树的结构,需要找出一个节点来替换当前节点。 根据二叉树的特点,当前节点大于所有左子树,小于所有右子树, 可以用左子树中最大原创 2014-12-11 10:19:33 · 2142 阅读 · 0 评论