
数据结构
文章平均质量分 76
z517602658
一段年代久远的C++代码
展开
-
数据结构--递归练习
///////////////////////////////////////递归练习//////////////////////////////////////#includeusing namespace std;//求前N个自然数之和int Sum(int N){ if(N == 1) return 1; return Sum(N-1)+N;}//求N的阶乘int原创 2017-04-20 22:43:32 · 999 阅读 · 0 评论 -
C++实现稀疏矩阵的压缩存储
什么是稀疏矩阵呢,就是在M*N的矩阵中,有效值的个数远小于无效值的个数,并且这些数据的分布没有规律。在压缩存储稀疏矩阵的时候我们只存储极少数的有效数据。我们在这里使用三元组存储每一个有效数据,三元组按原矩阵中的位置,以行优先级先后次序依次存放。下面我们来看一下代码实现。#include#includeusing namespace std;templateclass SparseMat原创 2017-04-23 15:12:03 · 6656 阅读 · 0 评论 -
线索化二叉树 前中后序线索化及前序中序遍历
#pragma once#includeusing namespace std;enum PointInfo{LINK,THREAD};//保存节点线索信息templatestruct BinaryTreeNodeThd{ T _data; BinaryTreeNodeThd* _pLeft; BinaryTreeNodeThd* _pRight; PointInfo原创 2017-05-07 16:57:32 · 1282 阅读 · 0 评论 -
二叉树面试题
1、>> 二叉树的后续遍历非递归void PostOrder_Nor()//后序遍历 非递归 { if(_pRoot == NULL) return; stack s; Node* pCur = _pRoot; Node* prev = NULL;//临时变量 保存刚刚访问过的节点 while(pCur || !s.empty()) { whil原创 2017-05-07 16:55:00 · 1064 阅读 · 2 评论 -
二叉树基本操作及面试题
#include#include#include#includeusing namespace std;templatestruct BinaryTreeNode//给出二叉树节点的结构体{ BinaryTreeNode(const T& value) :_value(value) ,_pLeft(NULL) ,_pRight(NULL) {} T _value;原创 2017-05-07 16:52:06 · 1098 阅读 · 2 评论 -
输出全排列
//输出全排列,时间复杂度近似为O(N!)void Prem(int* arr, int size, int N){ int idx = 0; if(size == N) { for(idx = 0; idx < size; idx++) { cout<<arr[idx]<<" "; } cout<<endl; } else { for(idx = N;原创 2017-04-21 15:12:39 · 1085 阅读 · 0 评论 -
括号匹配算法
bool IsBracket(char ch){ if(ch == '(' || ch == '[' || ch == '{' || ch == ')' || ch == ']' || ch == '}') { return true; } return false;}bool MatchBracket(char* str, size_t size){ int idx = 0原创 2017-04-21 15:05:07 · 991 阅读 · 0 评论 -
简易迷宫--递归算法实现
#include#includeusing namespace std;#define MaxCol 10#define MaxRow 10struct Seat//定义一个表示位置的结构体{ Seat(int x,int y) :_x(x) ,_y(y) {} int _x; int _y;};class Maze{public: Maze(int ar原创 2017-04-21 14:21:23 · 1266 阅读 · 0 评论 -
实现逆波兰表达式(后缀表达式)的运算结果
在栈的应用中有一个最经典的例题,那就是逆波兰表达式的求值。enum OPERATOR//定义一个枚举类型{ DATA,//数字 ADD,//下面为操作 SUB, MUL, DIV,};struct Cell//定义一个结构体包含数据及操作{ OPERATOR op; int data;};int CalaRPN(Cell cell[],size_t size)//计算原创 2017-04-21 13:50:12 · 1819 阅读 · 0 评论 -
实现Stack的基本操作
简单来说,栈是一种特殊的线性表,只允许在固定一端(栈顶)进行插入和删除元素的操作。因此栈又被称为后进先出的线性表。下面就来看看它可以进行哪些基本的操作。在进行扩容时,如果是对栈中基本数据类型的操作我们使用浅拷贝memcpy,否则用=进行拷贝,所以在这里用到了类型萃取。下面看一下代码实现。/////////////////////实现Stack的基本操作/////////////////////原创 2017-04-21 13:02:36 · 1367 阅读 · 0 评论 -
实现循环队列的基本操作
templateclass Queue{public: Queue(size_t capacity = 5) :_front(0) ,_rear(0) ,_capacity(capacity+3)//加一个常数防止传参为0程序奔溃 ,_count(0) { _pData = new T[_capacity];//开辟空间 } void Push(const T&原创 2017-04-21 12:34:36 · 1912 阅读 · 0 评论 -
C++实现对称矩阵以及压缩存储
#includeusing namespace std;///////////////////////////实现对称矩阵以及压缩存储/////////////////////////////////////templateclass SymmetricMatrix{friend ostream& operator& s);//声明一个友元重载输出符号public: Symmetr原创 2017-04-21 11:59:59 · 3074 阅读 · 0 评论 -
哈希表线性探测&二次探测
在代码中实现了哈希表中任意类型都可以存放,即哈希函数要可扩展以及哈希表动态增容的功能。贴上代码:#include#includeusing namespace std;template//特化 class _HashFun { public: size_t operator()(K key) { return key; } }; template<>原创 2017-06-09 11:00:36 · 2731 阅读 · 0 评论