
数据结构
小米的修行之路
是日已过,命亦随减;如少水鱼,斯有何乐?当勤精进,如救头燃!但念无常,慎勿放逸。
展开
-
带锁vector的封装
#pragma once#include <mutex>namespace zzcVector{ //初始化分配内存数量const int DEFAULT_INIT_LEN = 10; //当内存不足时,每次分配的内存数量const int DEFAULT_ADD_LEN = 10; template<class T> class Vector {...原创 2020-02-26 15:05:20 · 857 阅读 · 0 评论 -
基于CAS原子操作实现互斥量并用于list封装
1、List封装类:#pragma once#include <list>#include <chrono>#include <Windows.h>template <typename T>class zzcList{public: zzcList() :mutex(0), lock(0), unlock(1) {}; ~z...原创 2019-07-30 10:05:03 · 422 阅读 · 0 评论 -
带锁循环队列的一个封装类
直接上类:#ifndef _ZZC_DEQUE_#define _ZZC_DEQUE_#include "MutexLock.h"#include <deque>#include <iostream>using namespace std;template <typename _T>class ZZCdeque{public: ZZCde...原创 2018-07-12 14:07:57 · 481 阅读 · 0 评论 -
带锁循环队列模板封装2
前面已经封装了一个带锁循环队列,测试没有问题这里更改了一下锁的方式:队列模板的封装:#ifndef _ZZC_DEQUE_#define _ZZC_DEQUE_#include "CSectionLock.h"#include <deque>using namespace std;template <typename _T>class ZZCdeq...原创 2018-07-18 11:12:22 · 257 阅读 · 0 评论 -
图的两种最小生成树算法之C++封装
最小生成树定义: 给定一无向带权图,顶点数是n,要使图连通只需n-1条边,若这n-1条边的权值和最小,则称有这n个顶点和n-1条边构成了图的最小生成树(minimum-cost spanning tree)。两种最小生成树算法:1、prim算法:设图G顶点集合为U,首先任意选择图G中的一点作为起始点a,将该点加入集合V,再从集合U-V中找到另一点b原创 2017-08-02 23:19:13 · 4307 阅读 · 1 评论 -
链表形式二叉树之C++封装
一、前面的数组形式的二叉树是顺序存储的形式来存储,链表形式的二叉树是链式存储的形式来存储。链式存储较顺序存储的优点:二叉树的存储结构可以用顺序存储和链式存储来存储。二叉树的顺序存储结构由一组连续的存储单元依次从上到下,从左到右存储完全二叉树的结点元素。对于一般二叉树,应将其与完全二叉树对应,然后给每个结点从1到i编上号,依次存储在大小为i-1的数组中。这种方法只适用于完全二叉树,对非完全二叉树原创 2017-07-23 19:12:07 · 618 阅读 · 0 评论 -
单链表之C++封装
前面的顺序表是用一组地址连续的存储单元来保存数据的,所以它具有随机存取的特点。即查找快速,但是做插入或删除动作是,需要移动大量元素,效率较低。链表链表是线性表的链式存储结构,它相比于顺序表,在插入和删除元素时,效率要高很多。链表,是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。每个数据单元有两部分组成,一个是数据域,存储数据值;另一个是原创 2017-07-18 23:58:25 · 1182 阅读 · 2 评论 -
栈之C++封装
1. 栈的简介1.1栈的特点栈(Stack)是一种线性存储结构,它具有如下特点:栈中的数据元素遵守”先进后出"(First In Last Out)的原则,简称FILO结构。限定只能在栈顶进行插入和删除操作。1.2栈的相关概念栈的相关概念:栈顶与栈底:允许元素插入与删除的一端称为栈顶,另一端称为栈底。压栈:栈的插入操作,叫做进栈,也称压栈、入栈。弹栈原创 2017-07-10 11:05:53 · 689 阅读 · 0 评论 -
环形队列之C++封装
一.环形队列 队列是一种常用的数据结构,这种结构保证了数据是按照“先进先出”的原则进行操作的,即最先进去的元素也是最先出来的元素.环形队列是一种特殊的队列结构,保证了元素也是先进先出的,但与一般队列的区别是,他们是环形的,即队列头部的上个元素是队列尾部,通常是容纳元素数固定的一个闭环。1、普通队列:【空间利用率不高】2、环形队列:【申请好的空间可以循环利用,较普原创 2017-07-09 14:04:05 · 2176 阅读 · 0 评论 -
图的邻接矩阵存储之C++封装
1、定义:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。2、由定义可知,图的邻接矩阵存储方式是用两个数据来表示。一个数据中存储图中顶点信息,另一个数据中(称为邻接矩阵)存储图中的边的信息。见下图:(图片来源于《大话数据结构》) 3、图原创 2017-07-30 13:10:58 · 972 阅读 · 0 评论 -
数组形式二叉树之C++封装
一、数组与二叉树的对应关系如下: 说明:节点在数组中的位置对应它在树中的位置,下标为0 的节点为根节点,下标为1是根的原创 2017-07-20 20:37:36 · 547 阅读 · 0 评论 -
线性表(顺序表)之C++封装
线性表概述线性表是最基本、最简单、也是最常用的一种数据结构。在线性表中数据元素之间的关系是线性,数据元素可以看成是排列在一条线上或一个环上。线性表分为静态线性表和动态线性表,常见的有顺序表(静态的)、单向链表(动态的)和双向链表(动态的)。以下是对顺序表的封装:.h文件:#pragma onceclass CZzcList{public: CZz原创 2017-07-15 00:00:37 · 1104 阅读 · 0 评论