算法与数据结构
文章平均质量分 56
竭尽全力_无怨无悔
故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。
展开
-
冒泡排序(单链表实现)
***冒泡排序(单链表)***先简单复习一下冒泡排序基本思路: 两两比较相邻记录的关键字,如果反序则交换,直到没有反序为止。如果有n个数,那么就要比较n-1趟喽!写程序之前,小编告诉各位读者:为了提高程序执行效率,专门设置头指针(* _head)和尾指针(* _tail).void BubbleSort(){ Node* p=NULL; Node* q=NULL; No原创 2016-04-06 23:12:26 · 1871 阅读 · 0 评论 -
递归实现二叉树遍历(前/中/后序)
void _PrevOrder(Node* root){ if(root == NULL) return; cout_data<<" "; _PrevOrder(root->_left); _PrevOrder(root->_right);} void _InOrder(Node* root) { if(root == NULL) return; _InOr原创 2017-03-30 19:06:18 · 694 阅读 · 0 评论 -
队列实现二叉树层序遍历
//基本数据结构templatestruct BinaryTreeNode{ T _data; BinaryTreeNode* _left; BinaryTreeNode* _right; BinaryTreeNode(const T& x) :_data(x) ,_left(NULL) ,_right(NULL) { }};//层序遍历,队列实现void _L原创 2017-03-30 19:21:08 · 1388 阅读 · 0 评论 -
关于二叉树节点个数(节点总个数、叶子节点个数和第 K层节点个数)
//基本数据结构templatestruct BinaryTreeNode{ T _data; BinaryTreeNode* _left; BinaryTreeNode* _right; BinaryTreeNode(const T& x) :_data(x) ,_left(NULL) ,_right(NULL) { }};//节点总个数size_t _size原创 2017-03-30 19:25:57 · 5265 阅读 · 0 评论 -
非递归实现二叉树遍历(前/中/后序)
//基本数据结构templatestruct BinaryTreeNode{ T _data; BinaryTreeNode* _left; BinaryTreeNode* _right; BinaryTreeNode(const T& x) :_data(x) ,_left(NULL) ,_right(NULL) { }};//前序遍历void _PrevO原创 2017-03-30 19:26:33 · 425 阅读 · 0 评论 -
哈希桶的实现
哈希桶用于哈希冲突的解决,也叫做开链法或拉链法。#include #include #include using namespace std;templatestruct HashBucketNode{ K _key; V _value; HashBucketNode* _next; HashBucketNode(const K& key, const V& value)原创 2017-04-07 13:28:40 · 1246 阅读 · 0 评论 -
线索化二叉树
#includeusing namespace std;#include enum PointerTag { THREAD, LINK };template struct BinaryTreeNode_Thd{ T _data; // 数据 BinaryTreeNode_Thd* _left; // 左孩子 Bi原创 2017-04-01 19:26:33 · 685 阅读 · 1 评论 -
二叉搜索树
二叉搜索树:1.每个节点都有一个作为搜索依据的关键码(key),所有节点关键码(key);2.左子树上所有节点的1关键码(key)都小于根节点的关键码(key);3.右子树所有节点的关键码(key)都大于根节点的关键码(key);4.左右子树都是二叉搜索树。实现:二叉搜索树(节点插入、删除和查找)#includeusing namespace std;te原创 2017-04-01 19:50:28 · 774 阅读 · 3 评论 -
朋友圈问题(并查集)
问题描述: 假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写出程序求出这n个人里一共有多少朋友圈。 例如:n=5,m=3,r={{1,2},{2,3},{4,5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友。则1,2,3属于一个朋友圈,4,5属于另一个朋友圈,结果原创 2017-04-01 19:50:57 · 3176 阅读 · 0 评论 -
AVL树的实现
AVL树左子树和右子树的高度之差绝对值不超过1;树中的每个左子树和右子树都是AVL树;每个节点都有平衡因子,任一节点的平衡因子为-1,0,1(平衡因子为右子树高度减去左子树高度)#includeusing namespace std;templatestruct AVLTreeNode{ K _key; V _value; AVLTreeNode* _lef原创 2017-04-05 19:49:44 · 780 阅读 · 0 评论 -
项目:文件压缩与解压缩
项目简介:统计文件中字符出现的次数,利用堆建造Huffman树(字符出现次数多的编码短,出现次数少的编码长);根据建造好的Huffman树形成编码,对文件进行压缩;将文件中出现的字符以及它们出现的次数写入配置文件,便于解压缩;根据配置文件读取相关信息,重建Huffman树,对压缩后的文件进行译码。项目实现://heap.h#pragma once#include原创 2017-03-30 18:18:14 · 1369 阅读 · 0 评论 -
顺序表实现
#include #include #include #include #define MAX 100typedef int DateType;typedef struct List{ int a[MAX]; int size; //size动态变化}SeqList,*pSeqList;void InitSeqList(pSeqList pSeq){ memset(原创 2017-03-30 18:10:21 · 327 阅读 · 0 评论 -
算法时间复杂度分析
简单而言,算法时间复杂度就是数学里面的函数,也就是算法的时间度量,一般记作:T(n)=O( f(n) )。算法分析的分类: 1.最坏情况:任意输入规模的最大运行时间。(上界) 2.平均情况:任意输入规模的期望运行时间。 3.最好情况:任意输入规模的最小运行时间,通常最好情况不会出现。(下界) 情景一:(常数阶)int sum=0,n=2;sum+=n;原创 2016-04-11 13:00:41 · 895 阅读 · 0 评论 -
复杂链表的复制
复杂链表的复制复杂链表定义: 在复杂链表中,每个节点除了有一个_pnext指针指向 下一个结点外,还有一个_pSibling指向链表的任意节点或者NULL.(如下图所示)备注:橙黄箭头代表_pnext指针,深蓝箭头代表_pSibling指针。任务一:创建复杂链表//节点定义struct ComplexListNode{ ComplexListNode(int原创 2016-05-02 21:00:52 · 377 阅读 · 0 评论 -
堆(Heap)的建立
堆(Heap)的建立//_Heap.h文件#pragma once#include #include using namespace std;template class Heap{public: Heap() { } Heap(const T*a,size_t size) { for(int i=0;i<size;i++) { _a.pu原创 2016-05-21 20:50:43 · 799 阅读 · 0 评论 -
链表面试题之快慢指针问题(一) 查找链表中间节点
查找链表中间节点原创 2016-06-13 15:16:57 · 4822 阅读 · 2 评论 -
面试题:一个数组实现两个栈
一个数组实现两个栈问题分析 利用顺序表模拟实现栈(一个数组实现一个栈)问题解决方案一: 一个数组从中间分为两部分,中间左端为栈1,中间右端为栈2; 示例图: 存在缺点:方案一会存在当一个栈满了,另一个栈还是空的的现象,这样产生浪费空间的问题。方案二: 一个数组的两端分别作为两个栈的原创 2016-09-28 17:42:48 · 1931 阅读 · 0 评论 -
数据结构-广义表(GeneralizedList)实现
广义表广义表是非线性的数据结构,是线性表的一种推广,由N个序列组成的有序序列;广义表在表的描述中又得到了表,即允许表中有表,简而言之,广义表的定义是递归的。广义表的简单表示:(1)A=();(2)B=(a,b);(3)C=(c,(a,b));(4)D=(d,(c,(a,b)));原创 2016-09-28 22:16:46 · 683 阅读 · 0 评论 -
矩阵(Matrix)
#include #include using namespace std;template//对称矩阵class SymmeticMatrix{public: //构造函数,实现对称矩阵初始化 SymmeticMatrix(T* Array,size_t sz) :_sz(sz*(sz+1)/2-1) ,_array(new T[_sz]) ,_n(sz) {原创 2016-11-08 13:36:41 · 419 阅读 · 0 评论 -
位图的实现
#include #includeusing namespace std; class Bitmap{public: Bitmap() : _size(0) {} Bitmap(size_t size) :_size(0) { _array.resize((size>>5)+1); } void Set(size_t num) { size_t ind原创 2017-04-07 13:28:59 · 814 阅读 · 0 评论 -
栈和队列的实现
栈:特点:数组实现,先进后出; 基本操作:出栈,入栈,判空,元素个数,取栈顶元素;队列:特点:链表实现,先进先出; 基本操作:出队,入队,判空,元素个数,取队首和队尾元素。#include #include using namespace std;//Stack implementationtemplateclass Stack{p原创 2017-03-30 17:27:46 · 873 阅读 · 1 评论 -
哈希表的实现
#include #include #include using namespace std;enum Status { EMPTY, EXIST, DELETE,}; templatestruct KVNode { K _key; V _value; Status _status; KVNode(co原创 2017-04-05 19:51:02 · 1086 阅读 · 0 评论