一.八数码问题八数码问题也称为九宫问题。在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格,与空格相邻的棋子可以移到空格中。要求解决的问题是:给出一个初始状态和一个…
Java并发集合的实现原理
本文简要介绍Java并发编程方面常用的类和集合,并介绍下其实现原理。 AtomicInteger 可以用原子方式更新int值。类 AtomicBoolean、AtomicInteger、AtomicLong 和 Atom…
判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
1.判断二叉树是否平衡 //求树的高度 int TreeDepth(Node* t) { int hl,hr,h; if(t != NULL) { hl = TreeDepth(t->left); hr = Tre…
基于ZooKeeper的分布式锁和队列
在分布式系统中,往往需要一些分布式同步原语来做一些协同工作,上一篇文章介绍了Zookeeper的基本原理,本文介绍下基于Zookeeper的Lock和Queue的实现,主要代码都来自Zookeeper的官方recipe。…
单链表的建立、排序和翻转
链表: 1、注意是否有带头结点。 2、单链表的建立:顺序建表(尾插法)、逆序建表(头插法)。 3、单链表的插入、删除操作需要寻找前驱结点。 单链表的建立、排序和翻转,都是针对有头结点的单链表。 #include <…
链表笔试题
链表: 1、注意是否有带头结点。 2、单链表的建立:顺序建表(尾插法)、逆序建表(头插法)。单链表插入、删除操作需要寻找前驱结点。 3、双向链表和单向链表相比,多了一个前驱指针,单向链表在删除结点时候要遍历链表,双向链表…
二叉树的建立、销毁、各种遍历(递归、非递归)
二叉树的基本操作,都使用递归: //二叉树 class Node { public: char data; Node *left; Node *right; Node():data(' '),left(NULL),rig…