- 博客(13)
- 资源 (1)
- 收藏
- 关注
原创 哲学家就餐
来源:java编程思想 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。 产生死锁的四个必要条件: (1) 互斥条件:一个资源每次只能被一个进程使用。 (2) 占有且等待:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 (3)不可强行占有:进程已获得的资源,在末使用完之前,不能强行剥夺。 (4) 循环等待条件:
2017-08-17 11:47:09
256
原创 BlockingQueue实现生产者消费者模式
阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。使用阻塞队列可以忽略同步问题,因为它们已经有BlockingQ
2017-08-17 11:43:32
299
原创 springIOC的简单实现
主要内容参考 http://www.cnblogs.com/fingerboy/p/5425813.html Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。即Spring管理对象生命周期及依赖关系 程序中所有的Bean之间的
2017-08-17 09:48:31
214
转载 归并排序
归并排序 package algorithm; import java.util.Arrays; public class MergeSort { private static int[] a={0,2,0,0,0,-1,0,0,0,0,0,-1}; public static void mergeArray(int left,int right){ if(left>right)
2017-05-22 19:50:55
177
转载 快速排序算法
快速排序 package algorithm; import java.util.Arrays; public class QuickSort { private static int[] a={11,6,33,0,33,21,89,34,0,90,123,4,33,21}; public static void swap(int i,int j){ int temp=a[i];
2017-05-22 19:48:55
177
翻译 java构造器内部的多态方法
在构造器内部调用正在构造的某个对象的某个动态绑定方法。即在基类构造器中调用被子类覆盖的方法。所以此方法所操纵的某个成员可能还未进行初始化。 解决该问题的办法在于:对象初始化首先会在其他任何事物发生之前,将分配给对象的存储空间初始化为二进制的零。 public class A { public A(){ System.out.println("A before"); this.
2016-10-31 23:13:33
328
翻译 图的遍历
基于邻接表存储 结点表示 typedef struct node{ int vertex; //顶点值 struct node* next; }Node;Node graph[N]; 1.深度优先遍历(depth first search) 首先访问结点v,并标记已被访问过,然后从v的邻接表中选取一个未被访问的顶点p,并从p开始继续进行深度优先遍历(递归实现) i
2016-07-20 23:55:52
205
翻译 线索二叉树
在二叉树的2n个链中,有n+1个空链。用线索即指向其他结点的指针来利用这些空链。 1.左儿子为空,将指向左儿子的指针指向中序遍历的前驱结点 2.右儿子为空,将指向右儿子的指针指向中序遍历的后继结点 使用left_thread和right_thread来标记当前结点的左右指针指向线索还是左右儿子。 结点结构如下:typedef struct node{ struct node *l
2016-06-02 20:45:01
316
翻译 二叉树的迭代后序遍历
一: 1.将左结点入栈,直至左结点为空 2.判断右结点 (1)若右结点不为空且右结点未被访问过,则将右结点按照和左结点相同的规则入栈 (2)若右结点为空或已被访问过,则将当前结点输出,出栈并进行标记 **从分支再次进入循环,若从(1)进入,则继续入栈;若从(2)进入,则跳过入栈阶段,将当前栈顶置为当前结点 void IteratorPrint(TreeNode *root){
2016-05-25 16:42:45
915
转载 贪心算法之装箱问题
装箱问题的贪心准则: 1.将物品体积从大到小排列 2.遍历箱子,将物品放入一个较早打开的且剩余空间足够的箱子,否则开新箱子 结点类型: typedef struct goodnode{ int gno; int v; }Goods; //物品信息结点 typedef struct GoodNode{ int gno; struct GoodNode *next; }G
2016-05-04 22:38:39
1376
转载 堆排序
1.堆排序是在完全二叉树的基础上进行的 2.堆排序的步骤: *将这个完全二叉树调整为一个大根堆(小根堆) *交换最后一个结点和根结点数据域的值 *将最后一个结点排除在下一次的排序之中,即砍掉最后一个结点 完全二叉树的创建(借助队列): BinaryNode* CreateBinaryTree(int a[],int n,BinaryNode** CT){ B
2016-05-01 23:34:17
193
转载 二叉查找树的创建及遍历
1.二叉查找树的创建(左比根小,右比根大) BinaryNode* CreateBinaryTree(int a[],int n){ //数据存在数组a中 int i; BinaryNode *root,*newp,*cp,*parent; //newp当前正在创建的结点,cp和parent寻找当前父结点 root=NULL; for(i=0;i<n;i++){
2016-05-01 23:11:20
277
转载 稀疏矩阵的十字链表存储
1.结点类型 我们将结点分为两种类型,头结点和数据结点,头结点包含right,down和next域,数据结点包含right,down和entry域。right域将同一行的结点链接起来,down域将同一列的结点链接起来,next域将头结点链接起来。因此使用union共用体创建合适的结点结构。 typedef struct entry_node{ int row; int co
2016-04-25 21:20:48
559
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人