Data Struct
文章平均质量分 82
luxiaoxun
拒绝平庸,但也不指望什么奇迹!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HashTable的C++实现
hash表的实现1、分离连接法(separate chaining)#include#includeusing namespace std;template class HashTable{ public: explicit HashTable( int size = 101 ); void makeEmpty( ) { for原创 2012-04-06 18:59:47 · 2981 阅读 · 0 评论 -
大整数加减乘除的实现
为了复习C++基本的东西,自己随便写的,实现的是正的大整数的加减乘除,其中除的实现比较低效,没有找到很好的解决方法。实现代码:#include using namespace std; const int MAXLEN = 100; class Integer {private: int is_neg; //是否为负 int原创 2012-09-14 21:04:56 · 10163 阅读 · 1 评论 -
设计包含min函数的栈
题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。 分析:这是google的一道面试题。我看到这道题目时,第一反应就是每次push一个新元素时,将栈里所有逆序元素排序。这样栈顶元素将是最小元素。但由于不能保证最后push进栈的元素最先出栈,这种思路设计的数据结构已经不是一个栈了。在栈里添加一个成员变量存原创 2012-04-08 16:13:59 · 679 阅读 · 0 评论 -
内部排序法小结
1.冒泡排序(Bubble Sort)冒泡排序方法是最简单的排序方法。这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,“最原创 2012-08-02 20:34:12 · 5169 阅读 · 0 评论 -
hashmap的C++实现
按照hashmap的基本原理用C++实现了简单的基本功能,复杂的实现参考C++库的源码,C++最新的标准库里已经有以下四种基于hashtable的容器:unordered_set(C++11) unordered_multiset(C++11) unordered_map(C++11) unordered_multimap (C++11)。具体参考:http://en.cppr原创 2012-07-25 19:00:02 · 9683 阅读 · 0 评论 -
Trie树的C++实现
Trie—单词查找树Trie,又称单词查找树、前缀树,是一种哈希树的变种。应用于字符串的统计与排序,经常被搜索引擎系统用于文本词频统计。性质:1.根节点不包含字符,除根节点外的每一个节点都只包含一个字符。2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。3.每个节点的所有子节点包含的字符都不相同。优点:1.查询快。对于长度为m的键值,最坏情况下只需原创 2012-09-03 13:40:23 · 6563 阅读 · 2 评论 -
链表笔试题
链表:1、注意是否有带头结点。2、单链表的建立:顺序建表(尾插法)、逆序建表(头插法)。单链表插入、删除操作需要寻找前驱结点。3、双向链表和单向链表相比,多了一个前驱指针,单向链表在删除结点时候要遍历链表,双向链表在删除不需要遍历。双向循环链表的插入和删除:1.p之后插入ss->next = p->next;p->next = s;s->prior = p;原创 2012-05-05 20:46:49 · 6455 阅读 · 4 评论 -
二叉树笔试题
题目:输入两棵二叉树A和B,判断树B是不是A的子结构递归判断:如果当前结点值相等,就判断左子树和右子树是否是子结构bool IsChildTree(Node * father, Node * son){ if(father == NULL && son == NULL) return true; if(father == NULL && son原创 2012-05-05 15:30:45 · 7398 阅读 · 2 评论 -
二叉树的建立、销毁、各种遍历(递归、非递归)
二叉树的基本操作,都使用递归://二叉树class Node{public: char data; Node *left; Node *right; Node():data(' '),left(NULL),right(NULL){} Node(char ch):data(ch),left(NULL),right(NULL){}}原创 2012-05-05 10:51:09 · 5195 阅读 · 0 评论 -
判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
//判断二叉树是否平衡int isBalanced(Node* t) { if(t==NULL) return 1; int leftDepth = TreeDepth(t->left); int rightDepth = TreeDepth(t->right); if(abs(leftDepth-rightDepth) > 1)原创 2012-05-05 11:02:13 · 2392 阅读 · 0 评论 -
优先级队列实现哈夫曼树的编码和译码
//优先级队列实现的哈夫曼树的编码和译码#include #include #include using namespace std; class Node { public: float weight; Node* left; Node* right; char ch;原创 2012-04-06 19:42:05 · 1211 阅读 · 0 评论 -
表达式转二叉树、计算带括号和浮点数的表达式
1、后序表达式求值:后续表达式(逆波兰式)的特点:没有括号。从前向后扫,遇到操作数压栈;遇到操作符,从栈中取出2个操作数运算,结果压栈。最终栈中所剩的数为结果。2、中序表达式求值我们先来定义运算符的优先级:(+,-*,/,%从上到下依次升高准备2个栈,一个专门存放运算符,另一个专门存放操作数。1.遇到),那么退栈计算到(为止.结果压栈。原创 2012-05-14 16:31:07 · 3345 阅读 · 0 评论 -
Vector的C++实现
实现一:templateclass Vector{public: explicit Vector(int initsize=0):theSize(initsize),theCapacity(initsize+SPACE_CAPACITY) { datas=new Object[theCapacity]; } Vector(const Vector & rhs)原创 2012-04-06 18:36:09 · 1086 阅读 · 0 评论 -
二叉树中路径和为某整数的所有路径
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22和如下二元树 10 / \原创 2012-05-05 15:07:39 · 7022 阅读 · 1 评论 -
图的遍历、拓扑排序、最短路径算法
//深度优先遍历:void DFSTraverse ( Graph G ){ visited [0 .. G.vexnum-1] = false; // 初始化访问标志为未访问(false) for ( v = 0; v < G.vexnum; v ++ ) if ( ! visited[v] ) DFS ( G, v ); // 从未被访问的顶点开始DFS}vo原创 2012-04-07 18:17:28 · 2844 阅读 · 0 评论 -
BST树 B-树 B+树 B*树简介
BST即二叉搜索树:1.所有非叶子结点至多拥有两个儿子(Left和Right);2.所有结点存储一个关键字;3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;如:B-树(B树)是一种多路搜索树(并不是二叉的):1.定义任意非叶子结点最多只有M个儿子;且M>2;2.根结点的儿子数为[2, M];3.除根结点以外的非叶子结点的儿子数原创 2012-10-16 14:03:50 · 7042 阅读 · 0 评论
分享