数据结构
chenmiao0924
未来的程序猿
展开
-
稀疏矩阵的基本操作
#include#include#include#includeusing namespace std;template class SparseMatrix{public: //构造 SparseMatrix() {} SparseMatrix(int* arr,size_t row,size_t col,const T& invalid):_row(row),_col原创 2017-05-04 21:11:15 · 1826 阅读 · 0 评论 -
已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中
思路: 在B中寻找A的元素,若是找到了,则删除A中的该元素。这样A中剩下的就是A,B的差集 例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。 具体代码如下://,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。 #include <iostr原创 2017-07-26 12:54:16 · 619 阅读 · 0 评论 -
链表翻转----逆置链表的变形
具体题目详解: 给出一个链表和一个数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, 解决思路: 先分析题目,当节点数有K个时,逆置长度为K的链表,当节点数不足K时,则不做任何处理。 总的思路为:将长度为K的子链表从原链表中拿出,然后逆置,最后将逆置后的子链表再连接回原链表中。 我的解原创 2017-07-23 23:16:05 · 354 阅读 · 0 评论 -
元素出栈入栈的合法性
具体思路如下: 给定两个序列,一个是入栈的序列in,一个是出栈的序列out. 1.定义一个栈。 2.当栈为空时或栈顶元素不等于out[ j ]中的元素时,将in中元素入栈 3.当栈顶元素等于out[ j ]中元素时,出栈 4.入栈出栈操作后,栈中的元素全出来了,则是合法的。 反之,则是非法的。 例如: 入栈的序列(1,2,3,4,5),出栈序列为 (4,5,3,2,1)是合法序列,原创 2017-07-22 16:44:51 · 652 阅读 · 0 评论 -
实现一个栈,要求pop,push,Min,时间复杂度为O(1)
有两种方法。 方法一: 利用一个栈实现。思路如下: 1.入栈时,一次入两个元素,第一次入栈,直接元素入栈;第二次入栈,直接放最小的元素入栈。这样,栈顶元素永远是最小的,Min时,直接top(),就可以得到。 2.出栈时,一次出两个元素。 具体代码如下:template <class T>class Stack{public: void Push(T data) {原创 2017-07-22 11:05:44 · 1172 阅读 · 0 评论 -
二叉搜索树的基本功能的实现(递归及非递归直线插入,删除,查找)
二叉搜索树:也称二叉排序树。它可能是一个空树,具有以下的性质: 1.若它的左子树不为空,则左子树上的所有节点的值均小于根节点 2.若它的右子树不为空,则右子树上的所有节点的值均小于根节点 3.它的左右子树也分别为二叉搜索树 实现代码:原创 2017-05-18 20:49:46 · 341 阅读 · 0 评论 -
线索化二叉树的构造及遍历
前言:二叉树虽然是非线性结构,但二叉树的遍历却为二叉树的结点集导出了一个线性序列。对于 前、中、后序遍历,除了相应序列的第一个结点和最后一个节点,二叉树的遍历序列中每个 结点都有一个前驱和后继结点,但在二叉树中,无法很快的找出按照某种遍历序列该结点的前驱和后继。在二叉树中希望很快找到某一节点的前驱或后继,而不希望每次都要对二叉树遍历一遍,因此 在创建二叉树的过程中,需要将每个结原创 2017-05-10 17:14:06 · 463 阅读 · 0 评论 -
二叉树的三种遍历(前序,中序,后序)
void PreOrder() { _PreOrder(_pRoot); cout<<endl; }首先,创建二叉树//-------------孩子表示法---------------//节点template struct BinaryTreeNode{ BinaryTreeNode(const T& value):_value(value),_pLeft原创 2017-05-07 22:10:58 · 816 阅读 · 0 评论 -
对称矩阵的基本操作及其压缩存储
#includeusing namespace std;templateclass SymmetricMatrix{public: SymmetricMatrix(int* a, size_t N):_row(N),_col(N) { size_t index=0; _pData =new T[N*(N+1)>>1]; for(int i=0;i<N;i++) {原创 2017-05-04 21:13:21 · 737 阅读 · 0 评论 -
二叉树的层序遍历
思路: 根节点入队列,取队头,左子树入队列,右子树入队列,访问队头 void _Level(Node* pRoot) { if(NULL ==pRoot)//根节点为空,返回 return; queue<Node*> q; q.push(pRoot); while(!q.empty()) {原创 2017-07-26 12:59:09 · 315 阅读 · 0 评论