数据结构
文章平均质量分 72
zybjtu
这个作者很懒,什么都没留下…
展开
-
典型数据结构--基于链表的队列实现
#include using namespace std;templatestruct Node{T m_nData;Node* m_pNext;Node(T data);};templateNode::Node(T data):m_nData(data),m_pNext(NULL) {}templateclass C原创 2013-10-10 14:17:07 · 533 阅读 · 0 评论 -
经典数据结构之:哈希(链接法)
哈希的链接法是最为常用的哈希方式,因为它易扩展,而且代码简单,基本就是将链表进行一定规则的操作。代码如下:#include "CLinearLink.h"templateclass CHashLink{private: // members; int m_nSize; CLinearLink* m_pLinks;public: // constructors; C原创 2013-12-24 22:44:41 · 1930 阅读 · 0 评论 -
经典数据结构之哈希(open address)
哈希表的意义在于保证一定存储规模的情况下实现快速寻址。这对于自然界的大部分数据是极有意义的。传统的哈希表碰撞的处理方式:开放地址法和链接法,本文是开放地址法。.h 文件#include #include template class CHashTable{private: // members; bool* m_pEmpty; E* m_pArray; si原创 2013-12-24 00:03:20 · 1304 阅读 · 0 评论 -
经典数据结构之二叉树
二叉树是最为基本和最为重要的树结构,是堆的基础,也是学习树最为常见的入口。也是面试最常见的地方,虽然思路简单,却能在很短时间内考察到大家的功底。严格来说,树结构其实就是复杂的链接形式。.h文件/** *@ Program: the basic implement of BinaryTree; *@ Author: zhangyi; *@ Version: 1.0 *@ D原创 2013-12-29 00:02:28 · 506 阅读 · 0 评论 -
经典数据结构之数组实现的队列
队列和栈是最为基础的也是最为重要的数据结构。它采用先进先出的方式,广泛应用于网络编程中,套接字接受队列,消息队列,以及操作系统的优先队列中。归根到底,它和栈的区别就是每个元素的权重问题,所以可以统一看作一种具有优先级的线性表适配器。本文实现了基于数组的队列,其主要操作是添加和删除元素。为了实现O(1)添加O(1)删除元素,就需要移动队头坐标。.h#ifndef CQUEUE原创 2013-11-28 23:54:54 · 711 阅读 · 0 评论 -
经典数据结构之链表实现的栈
数组和链表是线性表的两种表现方式,而栈作为一种适配器,既可以用数组实现,也可以用链表实现,由于采用后进先出的方式,两者添加和删除元素都是O(1)的。主要区别之处是数组本身使用的空间较小,因为只需要用n个元素外加长度属性就好了。链表使用的空间较大,这是因为节点本身需要一个指针和数据来表示。#include #include templatestruct CLinkStack;temp原创 2013-11-27 23:50:52 · 548 阅读 · 0 评论 -
经典数据结构--数组实现的栈
templateclass CStack{private: T* data; int length; int size;public: CStack(); ~CStack(); void Create(); bool IsEmpty() const; bool IsFull() const; T Top() const; void A原创 2013-10-09 17:39:37 · 677 阅读 · 0 评论 -
经典数据结构之内存池技术
一般来说,使用堆来动态分配内存是常用的方式。然而,如果不断申请堆,会造成内存碎片,以至于由于堆本身大小的限制,难以再申请出连续空间的堆,显然造成了内存利用不合理。所以,有必要对内存申请进行一些管理。对于大型程序来说,很必要,提前申请一定量的堆,一定比不断申请快很多。使用数组方式,可以很快检索到可用的空间,并O(1)进行存取,而节点做成链表结构,更可以在O(1)释放某个空间之后找到合适的节点进行分配原创 2013-11-12 10:00:46 · 1025 阅读 · 0 评论 -
经典数据结构之稀疏矩阵
数据的存储形式,不外乎链表和类数组两种。使用二维数组存储矩阵,如果该矩阵是稀疏的,那么会浪费很多空间。例如一个4*4的对角阵,很明显,只有主对角线上才有元素。那么使用二维数组存储需要16个单位的 存储空间。然而通过定义一个结构体:templatestruct SDataType{ friend class CSparseMatrix; int m_nRow; int原创 2013-11-26 23:44:32 · 781 阅读 · 0 评论 -
经典数据结构之间接寻址
线性表主要有两中表现方式,一种是连续存储式,例如数组,另一种是非连续存储式,例如链表。 相比于链表,数组最大的好处就在于可以随机存取,链表的最大优势是,能够有效利用存储空间,合理的添加,删除操作只需要o(1)。于是诞生了间接寻址,即是把数组与链表的优点结合起来。代码如下:#ifndef INDIRECTLIST_HH#define INDIRECTLIST_HH#include原创 2013-11-11 19:21:18 · 1014 阅读 · 0 评论 -
经典数据结构之矩阵的基本运算
用一维数组来表示矩阵其实质与二维数组没啥区别,只是多了下标一步映射而已。由于方法本身很简单,所以不多做介绍。很容易扩展转置等方法,从而实现一个更为全面的矩阵类型。CMatrix.h#ifndef CMATRIX_HHH#define CMATRIX_HHH#include #include #include templateclass CMatrix{private: /原创 2013-11-24 21:05:00 · 1987 阅读 · 0 评论 -
经典数据结构之一维矩阵的基本操作
矩阵是用来进行大型数据处理的常用数据表达形式。最基本的矩阵自然是一维矩阵,而从概念上,数组可以看作一个一维矩阵。另一方面,数组的数组即是二维矩阵。其实,通过下标映射,一维矩阵可以表达所有维度的矩阵。下面先由一维矩阵说起。.h文件#include #include #include templateclass CArray1D{private: // members; int原创 2013-11-18 23:39:10 · 3291 阅读 · 0 评论 -
经典数据结构之二维矩阵的基本运算
数组的数组即是矩阵,这篇文章就是很好的例子。往往我们会抱怨c++ std里面没有现成的矩阵运算库,其实,矩阵运算十分容易构造,不论是二维数组,还是经过打包的数组,甚至是vector等容易,都可以很轻易地做出扩展,满足我们复杂的要求。具体代码如下所述:.h文件#ifndef CARRAY2D_HHH#define CARRAY2D_HHH#include #include原创 2013-11-21 23:26:19 · 1913 阅读 · 0 评论 -
经典数据结构--双向链表
双向链表是数据存储的一种表达方式。相比单链表本身,双向链表有一个很重要的优势就是,可以回头,然而也因此需要付出多个指针的存储空间代价。代码如下所示:#ifndef DOUBLELIST_HHH#define DOUBLELIST_HHH#include templateclass CDoubleList;templatestruct SDNode{private原创 2013-11-06 23:29:23 · 482 阅读 · 0 评论 -
经典数据结构--简单链表
链表作为最为常见的数据结构,它不需要连续的存储空间,插入和删除操作可以做到o(1)。可以说是链式数据结构的基础,树,图等其实都是复杂链表。针对专门的问题,例如跳表,循环队列等,都是各个面试常遇到的问题。具体代码如下所述,主要实现了关键部分,未考虑异常(无法申请空间等)情况。#ifndef CLINEARLINK_HHH#define CLINEARLINK_HHHtemplatec原创 2013-11-02 22:12:26 · 558 阅读 · 0 评论 -
经典数据结构与算法之循环单链表
循环链表是链表的经典变种,它可以解决很多问题。比如有个考察大数据的问题,假如有10亿个数据,如何选出其中最大的十个数。显然,我们可以构造一个循环链表,然后依次插入这10亿个数,与之前最大的数进行比较,如果大则插入,否则跳过。思路很简单,循环链表唯一的不同之处是,尾节点的next指针指向头结点。具体地说代码如下:#ifndef CIRCULARLINK_HHH#define CIR原创 2013-11-04 22:46:24 · 580 阅读 · 0 评论 -
典型数据结构:线性表(基于数组的实现)
templateclass CLinearList{private: // data; T* m_pData; int m_nLength; int m_nSize;public: // constructors; CLinearList(void); CLinearList(int size); ~CLinearList(void); // methods; bool原创 2013-10-31 11:48:44 · 531 阅读 · 0 评论 -
经典数据结构之最大堆
最大堆和最小堆是常用的优先队列。 其概念也比较简单,用树的方式描述,就是,父节点比子节点大(最大堆),小则为最小堆。最大堆和最小堆广泛用在有先后顺序的任务调度中。比如cpu的任务调度等。先上代码,后面再详细解释和补充我的看法。头文件#ifndef CBINARYTREE_H_INCLUDED#define CBINARYTREE_H_INCLUDED#include templ原创 2014-08-06 23:44:35 · 599 阅读 · 0 评论