自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 【C++】位图

#includeusing namespace std;class BitMap{public: BitMap(size_t size) { _capacity = size / 32 + 1; _array = new int[_capacity]; memset(_array, 0, sizeof(int)*_capacity); } void SetBit(int

2015-11-30 15:29:24 882

原创 【C语言】递归实现栈的逆序及排序

一、栈逆序void Move_bottom_top(stack&s)//把栈底元素移动到栈顶位置{ if (s.empty()) { return; } int top1 = s.top(); s.pop(); if (!s.empty()) { Move_bottom_top(s); int top2 = s.top(); s.pop(); s.push(

2015-11-29 15:40:49 3254

原创 【C++】满二叉树与完全二叉树的区别及判断

满二叉树与完全二叉树的区别:(1)完全二叉树,除最后一层可能不满以外,其他各层都达到该层节点的最大数;最后一层如果不满,该层所有                               节点都全部靠左排。(2)满二叉树,所有层的节点数都达到最大.满二叉树与完全二叉树的判断:(1)满二叉树:因为满二叉树的节点个数size与树的深度h的关系为:2^h - 1 = siz

2015-11-29 14:12:10 4136

原创 【C++】前序线索化二叉树及其遍历

#includeusing namespace std;enum PointTag{ LINK, THREAD,};struct BinTreeThingNode{ char _data; BinTreeThingNode*_left; BinTreeThingNode*_right; PointTag _leftTag; PointTag _rightTag; Bi

2015-11-28 14:10:14 1135

原创 【C++】后序线索化二叉树及其遍历

#includeusing namespace std;enum PointTag{ LINK, THREAD,};struct BinTreeThingNode{ char _data; BinTreeThingNode*_left; BinTreeThingNode*_right; PointTag _leftTag; PointTag _rightTag; Bi

2015-11-28 13:57:13 2364 1

原创 【C语言】求带环单链表的环长

思想:快慢指针,先让快指针追上慢指针,再快指针不动,慢指针单步走,两个指针再次相遇时,慢指针在第一次相遇后所单步走的步数就为环长           intLengthCycle(Plinklist*pplist){          assert(pplist);          Node*fast = *pplist;

2015-11-26 21:41:28 560

原创 【C语言】找带环单链表的环入口

思想:(1)快慢指针,先让快指针追上慢指针            (2)令快指针指向表头,慢指针的指向不变,两个指针同时开始走            (3)两个指针相遇时,所指节点即为环的入口Node*FindEntry(Plinklist*pplist){          assert(pplist);          Node*fas

2015-11-26 21:34:06 810

原创 【C语言】判断单链表是否带环

思想:快慢指针,若为环,则快指针一定能追上慢指针intIsCycle(Plinklist*pplist){          assert(pplist);          Node*fast = *pplist;          Node*slow = *pplist;          while(fast&&fa

2015-11-26 21:29:46 451

原创 【C语言】删除任意一个节点n(不知道头结点,且所删节点既不是头结点也不是尾节点)

voidDeleNode(Node*n){                    Node*tmp=n->next;          assert(n);          n->data=n->next->data;          n->next=n->next->next;          free(tmp);

2015-11-26 21:23:29 991

原创 【C语言】单链表的排序

voidBubbleList(PLinkList*pplist){          PLinkListprev,next,end ;          end=NULL;          while(end!=(*pplist)->next)          {                   prev=*pplist;

2015-11-26 20:09:54 5704 2

原创 【C语言】查找链表的中间节点及倒数第K个节点

//找链表的中间节点Node *MidNode(PLinkList plist){ PLinkList p1,p2; //若链表为空,直接返回 if(plist ==NULL) { printf( "NULL\n"); return

2015-11-26 20:06:05 1539

原创 【C语言】单链表的逆置

voidReverse(PLinkList*pplist){          PLinkListNewHead;          PLinkListtmp;          PLinkListbegin;          assert(pplist);          if(*pplist==NULL||(*pp

2015-11-26 19:59:43 890

原创 【C语言】两个有序单链表的合并

Node *MergeList(PLinkList p1,PLinkList p2){ PLinkList newhead = NULL; //新链表的头结点 PLinkList end = newhead ; //新链表的当前结点 if(!p1 ) { r

2015-11-26 19:55:10 7965

原创 【C++】栈处理后缀表达式

#include#includeusing namespace std;enum Type{ ADD, SUB, MUL, DIV, OP_NUM,};struct Cell{ Type _type; int num;};Cell RPNexp[] = { OP_NUM, 12, OP_NUM, 3, OP_NUM, 4, ADD, 0, MUL, 0,

2015-11-22 18:07:54 723

原创 【C++】中序线索化二叉树及其遍历

二叉树是一种非线性结构,遍历二叉树几乎都是通过递归或者用栈辅助实现非递归的遍历。用二叉树作为存储结构时,取到一个节点,只能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继。为了保存这种在遍历中需要的信息,我们利用二叉树中指向左右子树的空指针来存放节点的前驱和后继信息。enumPointerTag {THREAD,LINK};

2015-11-22 13:40:49 2106

原创 【C++】判断顺序栈出栈顺序的合法性

//判断顺序栈出栈顺序的合法性思想://给定一个入栈的字符串pushstr,再给定一个出栈的字符串popstr,根据栈的特性,判断该出栈顺序是否合法//1.先验证两个字符串的长度是否相等,不等,则肯定不合法;相等,再进行步骤2.//2.(1)判断pushstr与popstr当前所指向的字符的关系:// (2)当*pushstr != *popstr时,对*pushstr进行压栈操作后,p

2015-11-21 14:41:21 2873

原创 【C++】非递归遍历二叉树

//以下出现的_root标示二叉树的根节点//非递归先序遍历(根节点->左节点->右节点)思想:即用栈实现//遍历二叉树的前提条件是:该二叉树不为空。在满足该条件的情况下,进行以下步骤://1.先将二叉树的根节点push进栈。//2.在该栈不为空的条件下,执行一个循环(先用top保存栈顶元素,再对栈进行pop操作,因为栈具有后进先出的特点// ,所以先对top->_right进行判断

2015-11-19 21:12:57 1394

原创 【C++】二叉树的基本操作

#include#include#includeusing namespace std;struct BinaryTreeNode{ char _value; //节点值 BinaryTreeNode*_left; //左孩子 BinaryTreeNode*_right;//右孩子 BinaryTreeNode(const char value) :_val

2015-11-19 21:06:25 666

原创 【C++】两个栈实现一个队列

//两个栈实现一个队列的思想://1.只要实现的是队列的push功能,就把数据push进_PushStack栈。//2.要实现队列的pop功能时,分两种情况:// (1):当_PopStack栈中有数据时,就把_PopStack的栈顶元素pop出去;// (2):当_PopStack栈中无数据时,就用一个循环(依次把_PushStack栈中的栈顶数据push进_PopStack,再对

2015-11-19 20:51:48 496

原创 【C++】两个队列实现一个栈

//两个队列实现一个栈的思想:用_PushQ1队列作为push数据的队列,用_TmpQ2队列暂存数据////1.只要是对栈进行push操作,就将数据push入_PushQ1队列中。//2.要实现栈的pop操作,就要在_PushQ1队列或_TmpQ2队列不为空的情况下:// (1)若_PushQ1队列为空,而_TmpQ2队列不为空时,则swap(_TmpQ2, _PushQ1),便得_Pus

2015-11-19 20:49:26 1231

原创 【C++】广义表

广义表是线性表的扩展,是有n个元素组成有限序列。广义表的定义是递归的,因为在表的描述中又得到了表,允许表中有表。 A = () B = (a,b) C = (a,b,(c,d)) D = (a,b,(c,d),(e,(f),h)) #includeusing namespace std;enum Type //结点类型{ HEAD_TYPE

2015-11-17 15:09:50 615

原创 【C++】返回栈中最小的元素,要求时间复杂度为O(1)

返回栈中最小的元素,要求时间复杂度为O(1)思想:  以空间换时间,用两个栈DataStack栈中存储数据元素MinDataStack栈中存储最小的数据元素1.当两个栈都为空时,第一个数据元素在两个栈中都进行入栈操作2.再遇到元素时,先入DataStack栈3.将该元素与MinDataStack栈的栈顶元素比较,若小于MinDataStack栈的栈顶元素,则把该元素入M

2015-11-17 14:51:03 1040

原创 【C++】稀疏矩阵的普通转置与快速转置

因为稀疏矩阵的有效元素个数较少,所以以行优先的顺序把有效元素的信息封装在一个三元组中存储在顺序表里#include#includeusing namespace std;#define M 5#define N 6struct Tuple{ int _row; int _col; int _value;};class SparseMatrix{public: Sp

2015-11-17 14:35:15 2413

原创 【C++】迷宫

迷宫问题求解思路:  1.在给定迷宫入口的情况下,先把该入口进行入栈操作,并将其值改为2。  2.然后以栈顶元素的位置作为试探点,向四个方向进行试探。  3.遇到0值,则为通路,将0值所在位置入栈,并将其值改为2(标识能走得通的)。当栈顶元素位置的行或列为N时,则走出迷宫,return true.否则转(2)。  4.遇到1值,则该路不通,将试探点的值改为3(标识走了,但走不通

2015-11-17 14:17:44 898

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除