数据结构
文章平均质量分 76
龙少爷_阿呆
燕山大学硕士 研究XML关键字查询 关注数据结构和算法 java C/C Linux
展开
-
练手小程序3.按给定的字母顺序打印字符串
题目:已知字母序列【d, g, e, c, f, b, o, a】,请实现一个函数针对输入的一组字符串 input[] = {"bed", "dog", "dear", "eye"},按照字母顺序排序并打印,结果应为:dear, dog, eye, bed。考察知识点:字符串的大小比较代码如下:#include "stdafx.h"#include #include #inclu原创 2014-03-04 21:00:24 · 2102 阅读 · 0 评论 -
面试题7:用两个队列实现栈
题目:用两个队列实现一个栈。实现两个函数push和pop,完成从栈顶插入和删除结点的功能。原创 2013-07-19 16:39:54 · 1502 阅读 · 1 评论 -
面试题6:用两个栈实现队列
题目:用两个栈实现一个队列。请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。原创 2013-07-19 15:45:37 · 1228 阅读 · 0 评论 -
计数排序的三种方法
// Count_Sort.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;const int len = 100;class CountSort //计数排序类{public: CountSort(); ~CountSort(); void frist原创 2012-07-16 14:54:00 · 978 阅读 · 0 评论 -
面试题5:重建二叉树
思路:先根据先序序列第一个数建立根节点,然后再中序序列中找到根节点的位置,进而确定左右子树的前序序列和后序序列,递归的构建左右子树。C++代码:#include "stdafx.h"#include #include using namespace std;struct BiTreeNode{ int m_nData; BiTreeNode *m_pLeftChild;原创 2013-07-19 10:59:43 · 1125 阅读 · 0 评论 -
面试题4:从尾到头打印链表
方法一:利用栈实现C++代码:#include "stdafx.h"#include #include using namespace std;//链表中的结点类型struct ListNode{ int m_nKey; ListNode *m_pNext;};//从尾到头打印链表void PrintLinkedListReversely(ListNode *pH原创 2013-07-18 21:34:14 · 1430 阅读 · 0 评论 -
哈希树
我们选择质数分辨算法来建立一棵哈希树。选择从2开始的连续质数来建立一个十层的哈希树。第一层结点为根结点,根结点下有2个结点;第二层的每个结点下有3个结点;依此类推,即每层结点的子节点数目为连续的质数。到第十层,每个结点下有29个结点。如下图所示:同一结点中的子结点,从左到右代表不同的余数结果。例如:第二层结点下有三个子节点。那么从左到右分别代表:除3余0,除3余1,原创 2012-08-09 23:38:51 · 14898 阅读 · 5 评论 -
Trie树
定义:Trie树是一种哈希树的变种,又称字典树,单词查找树或者前缀树,用于保存大量的字符串,是一种用于快速检索的多叉树结构(如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树)。例如:假设词典由下面的单词构成:a、b、c、aa、ab、ac、ba、ca、aba、abc、baa、bab、bac、cab、abba、baba、caba、abaca、caaba其对应的Trie树如下图所示:原创 2012-08-08 19:26:48 · 2691 阅读 · 0 评论 -
哈希表的应用(C++实现)
问题描述:设计哈希表实现电话号码查询系统,实现下列功能:(1) 假定每个记录有下列数据项:电话号码、用户名、地址。(2) 一是从数据文件old.txt(自己现行建好)中读入各项记录,二是由系统随机产生各记录,并且把记录保存到new.txt文件中以及显示到屏幕上,记录条数不要少于30,然后分别以电话号码和用户名为关键字建立哈希表。(3) 分别采用伪随机探测再散列法和再哈希法解决冲突。原创 2012-08-18 19:12:32 · 21555 阅读 · 11 评论 -
哈希表的实现
相关定义:根据散列函数H(key)和处理冲突的方法将一组关键字映象到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“象” 作为记录在表中的存储位置,这种表便称为散列表(或称哈希表),这一映象过程称为散列造表或散列,所得的存储位置称散列地址。构造哈希函数的方法: 1. 直接寻址法;2. 数字分析法;3. 平方取中法; 4. 折叠法;5. 随机数法;6. 除留余数法处原创 2012-08-18 19:07:14 · 1779 阅读 · 0 评论 -
归并排序
代码:#include "stdafx.h"#include #include using namespace std;//合并两个排好序的数组nArr[nStart, nMid]和nArr[nMid+1, nEnd]void Merge(int nArr[], int nStart, int nMid, int nEnd){ //申请一个长度相同的临时数原创 2013-07-26 17:07:38 · 824 阅读 · 0 评论 -
二分查找的灵活应用
二分查找1.找任意一个出现key的下标 思路:mid位置小于key则low右移,大于key则high左移,等于则直接返回mid2.找第一个出现key的下标 思路:mid位置小于key则low右移,大于等于key则high左移,若low不越界且该位置的值等于key,则直接返回low,否则表示该值不存在3.找最大的小于key的下标 思路:mid位置小于key则low原创 2013-07-26 17:46:31 · 881 阅读 · 0 评论 -
练手小程序2.链表翻转问题
问题1:给出一个链表,将其翻转,比如链表1→2→3→4→5→6,翻转后6→5→4→3→2→1;问题2:给出一个链表和一个数k,将链表进行翻转,比如链表1→2→3→4→5→6,k=2, 则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6考察的知识点:链表的灵活操作代码如下:#include "s原创 2014-03-04 20:40:15 · 1894 阅读 · 0 评论 -
求二叉树的深度和宽度
// 求二叉树的深度和宽度.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include #include using namespace std;struct BTNode{ char m_value; BTNode *m_left; BTNode *m_right;};//先序创建二叉树void Crea原创 2013-10-07 22:52:04 · 25731 阅读 · 6 评论 -
直接插入排序的实现(递归和非递归)
// 递归和非递归实现直接插入排序.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;//插入排序(非递归)void InsertSort(int *pArr, int nLength){ if (pArr == NULL || nLength <= 0) { r原创 2013-10-22 10:54:58 · 3705 阅读 · 0 评论 -
遍历一个给定数组,创建一个有序链表
// 遍历数组建立有序链表.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;struct ListNode{ int m_nValue; ListNode *m_pNext;};//创建一个链表,输入从头到尾结点的值,输入-1表示结束void AddIte原创 2013-10-26 11:07:25 · 3141 阅读 · 0 评论 -
输出二叉树中所有从根结点到叶子结点的路径
// 输出二叉树中所有从根结点到叶子结点的路径.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include #include using namespace std;struct BTNode{ char m_value; BTNode *m_left; BTNode *m_right;};//先序创建二叉树原创 2013-10-07 20:38:48 · 18533 阅读 · 2 评论 -
二叉树的先序、中序、后序遍历的递归和非递归实现
#include "stdafx.h"#include using namespace std;const int MAXSIZE = 20; //定义栈空间大小为20struct BTNode{ char m_value; BTNode *m_left; BTNode *m_right;};BTNode *stackArr[MAXSIZE] =原创 2013-10-07 13:17:22 · 5146 阅读 · 1 评论 -
判断一个单向链表中是否存在环
判断一个单向链表中是否存在环原创 2013-09-11 13:26:11 · 4283 阅读 · 1 评论 -
并查集
并查集原创 2013-09-11 12:59:25 · 1768 阅读 · 0 评论 -
栈,队列,双端队列
stack堆栈,没有迭代器,支持push()方法。后进先出,top()返回最顶端的元素,pop()剔除最顶元素deque双端队列,支持迭代器,有push_back()方法,跟vector差不多,比vector多了个pop_front,push_front方法queue队列,先进先出,不支持迭代器,有push()方法,pop()剔除第一个元素,front()返回第一个元素代码原创 2013-09-01 19:51:39 · 2126 阅读 · 0 评论 -
静态数组实现双向栈
// DouDirectionStack.cpp : 定义控制台应用程序的入口点。//静态数组实现双向栈//拷贝构造函数有点问题#include "stdafx.h"#include using namespace std;/*静态数组实现双向栈:两栈底在数组两端,栈顶相向,迎面增长,栈顶指针指向栈顶元素栈空:左栈空 top[0]=-1; 右栈空top[1]=maxSize; 全栈空转载 2012-07-24 19:30:02 · 1219 阅读 · 0 评论 -
静态数组实现循环队列
vs2008运行正确,如有误,请各位大牛指正!// SQueue.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"/*静态数组实现循环队列:少用一个空间,队尾指针的下一位是队头指针时为满队头、队尾初始值:front = rear = 0;队头:总是指向第一个结点队尾:总是指向最后一个结点的下一位队空:front == rear队满:(rear原创 2012-07-20 20:51:40 · 811 阅读 · 0 评论 -
动态数组实现栈
// DStack.cpp : 定义控制台应用程序的入口点。//动态数组实现栈#include "stdafx.h"#include using namespace std;const int DStackIncreMent = 20;/*动态栈的条件栈顶初始值:top=0;栈顶:总是指向刚刚压入值的下一单元栈空:top=0栈满:top=Max (或转载 2012-07-19 22:15:15 · 633 阅读 · 0 评论 -
单链表的实现(带头结点)
vs2008运行正确,如有误,请各位大牛指正!// LinkList.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;templatestruct Node{ T data; //结点的数据域 Node* next; //结点的指针域,指向下一个结点};原创 2012-07-17 11:04:10 · 1443 阅读 · 1 评论 -
静态数组实现栈
vs2008运行正确// SStack.cpp : 定义控制台应用程序的入口点。//静态数组实现栈#include "stdafx.h"#include using namespace std;const int Max = 50;/*静态栈的条件栈顶初始值:top=-1;栈顶:总是指向刚刚压入的值栈空:top=-1栈满:top=Max-1入转载 2012-07-19 21:19:38 · 667 阅读 · 0 评论 -
双向链表的实现
vs2008运行正确,如有误,请各位大牛指正!// DoubleList.cpp : 定义控制台应用程序的入口点。//双向链表#include "stdafx.h"#include using namespace std;templatestruct Node{ Type data; Node* prior; //指向前驱结点 Node* nex原创 2012-07-19 09:43:59 · 715 阅读 · 0 评论 -
循环链表的实现
vs2008运行正确,如有误,请各位大牛指正!注意与单链表(带头结点)的差别// CycleList.cpp : 定义控制台应用程序的入口点。//循环链表#include "stdafx.h"#include using namespace std;templatestruct Node{ Type data; Node *next;};原创 2012-07-18 17:00:30 · 5325 阅读 · 1 评论 -
单链表的实现(不带头结点)
vs2008运行正确,如有误,请各位大牛指正!实验证明:在某些情况下(比如拷贝构造函数,尾插法建表),不带头结点的单链表需要单独处理第一个元素。引入头结点的好处在于表中的每个元素的处理可以统一。 强烈推荐使用带头结点的单链表。// LinkList.cpp : 定义控制台应用程序的入口点。//定义的链表不含头结点#include "stdafx.原创 2012-07-18 09:45:05 · 6628 阅读 · 1 评论 -
动态数组实现循环队列
vs2008运行正确,如有误,请各位大牛指正!代码:// DQueue.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"/*动态数组实现循环队列:少用一个空间,队尾指针的下一位是队头指针时为满队头、队尾初始值:front = rear = 0;队头:总是指向第一个结点队尾:总是指向最后一个结点的下一位队空:front == rear队满:(原创 2012-07-20 20:56:02 · 1473 阅读 · 0 评论 -
基于单链表的链队列
将单链表类(不带头结点)作为队列的私有变量存在问题:拷贝构造函数不起作用代码:// LinkListQueue.cpp : 定义控制台应用程序的入口点。//定义的链表不含头结点//将单链表类作为链队列类的私有变量#include "stdafx.h"#include using namespace std;template//定义结点struct Node{ T原创 2012-07-20 21:27:27 · 746 阅读 · 0 评论 -
二叉树的实现
由于本人能力有限,本文参考另一位大牛的代码,在此对他表示感谢!vs2008运行正确,如有误,请各位大牛指正!// BiTree.cpp : 定义控制台应用程序的入口点。//三叉链表实现二叉树,有双亲域#include "stdafx.h"#include using namespace std;const int MaxBTreeSize = 20;template//二叉原创 2012-07-24 19:33:26 · 4364 阅读 · 0 评论 -
孩子兄弟表示法实现树
因本人能力有限,参考了另一位大牛的代码,在此向他表示感谢!vs2008运行正确,如有误,请各位大牛指正!// CSTree.cpp : 定义控制台应用程序的入口点。//孩子兄弟表示法实现树#include "stdafx.h"#include using namespace std;const int MaxCSTreeSize = 20; //结点类templatecl原创 2012-07-24 19:37:27 · 14779 阅读 · 7 评论 -
二叉排序树的实现
二叉排序树(Binary Sort Tree)又称二叉查找树。 它是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树;二叉排序树是一种动态树表。vs2008运行正确,如有误,请各位大牛指正!实现代码如下:原创 2012-08-12 20:42:20 · 1801 阅读 · 0 评论 -
胜者树与败者树
胜者树和败者树都是完全二叉树,是树形选择排序的一种变型。每个叶子结点相当于一个选手,每个中间结点相当于一场比赛,每一层相当于一轮比赛。 不同的是,胜者树的中间结点记录的是胜者的标号;而败者树的中间结点记录的败者的标号。 胜者树与败者树可以在log(n)的时间内找到最值。任何一个叶子结点的值改变后,利用中间结点的信息,还是能够快速地找到最值。在k路归并排序中经常用到。 一、胜转载 2012-08-08 19:24:39 · 908 阅读 · 0 评论 -
栈、队列小结
静态栈栈顶初始值:top=-1;栈顶:总是指向刚刚压入的值栈空:top=-1栈满:top=Max-1入栈: data[++top] = NewItem;出栈:newItem = data[top--]; 动态栈栈顶初始值:top=0;栈顶:总是指向刚刚压入值的下一单元栈空:top=0栈满:top=Max(或者不存在栈满,可以继续申请空间)入原创 2012-07-20 22:08:16 · 659 阅读 · 0 评论 -
单链表的和、交、差操作总结
本文是转自某位大牛的文章,在此表示衷心的感谢!本文对单链表的和、交、差操作的各种情况作了比较全面的总结,价值很高的! 操作一:链表的合并1、要求:两个单链表A和B,AB增C非增,C=A+B注意:利用原表A和B,允许有相同元素思想:1、每次都插小的,大的留下继续比较2、AB增C非增,则使用逆序插入3、不能连续插入(每次要插入的结点总是要从原链表中截断,插入到C中)转载 2012-07-19 10:20:23 · 912 阅读 · 0 评论 -
常见排序算法总结
参考了大牛的代码,自己理解整理。vs2008运行正确,如发现有误,请各位大牛指正!// Sort.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;const int len = 100;class CSort{public:CSort(); ~CSo原创 2012-07-16 10:15:35 · 1116 阅读 · 0 评论