原创 關於哈希表的一點理解
哈希表> 哈希表也叫散列表,是依據關鍵碼值(key value)而直接進行訪問的數據結構.也就是說,它通過把關鍵碼值映射到表中的一個位置來訪問記錄,以加快查找的速度.這個映射函數叫做散列函數,存放記錄的數組叫散列表. 瞭解
原创 數據結構之搜索二叉樹遞歸&非遞歸
一.搜索二叉樹的性質> 1). 每個節點都有一個作爲搜索依據的關鍵碼(key),所有節點的關鍵碼互不相同。 2). 左子樹上所有節點的關鍵碼(key)都小於根節點的關鍵碼(key). 3). 右子樹上所有節點
原创 數據結構之大小堆&&優先級隊列
大小堆> 一.什仫是堆? 堆這種數據結構說白了就是一顆完全二叉樹,堆的含義說明這顆完全二叉樹中的所有非終端結點的值均不大於(或不小於)其左,右孩子結點的值.若一維數組{k1,k2,k3,k4...kn}是堆,則堆頂元素必爲序列中
原创 排序算法之計數&基數排序
計數排序> 給定一組待排序的數據,找到這組數據中的最大值,然後開闢一個最大值加1的數組,用memset初始化爲全0,然後再次遍歷原數組,使得這個新開闢的數組中存儲的是該數字出現的次數,此時只需要將新數組的內容寫入原數組即可.
原创 AVL樹
AVL樹> 在之前我實現了二叉搜索樹,但是二叉搜索樹存在問題,就是當輸入單調增或者單調減的結點數據後,二叉樹就退化成類似鏈表的結構了,爲了解決二叉搜索樹的這種弊端就引入了AVL樹. AVL樹的性質> 1).左子樹和右子
原创 如何製作簡易菜單?
實現一個菜單組件包括下拉菜單和彈出菜單,實現框圖如下: 創建下拉菜單的基本過程: 1).新建一個JFrame框架.JFrame frame=new JFrame(); 2).新建一個菜單欄:菜單欄是窗口中的主菜單,
原创 排序算法之插入排序
插入排序> 對於排序相信大家都不陌生,就是將一組數據按照從大到小(降序)或者是從小到大(升序)進行排列,那仫常見的排序算法有哪些呢?我總結了以下幾種常見的排序算法,在本篇文章中我只介紹插入排序中的直接插入排序和希爾排序.
原创 淺析B樹的分裂過程
B-樹> 最近一直在研究樹的這種數據結構,今天實現了一顆適合外查找的平衡多叉樹就是B樹,有的地方也叫B-樹(不要誤讀爲"B減樹"奧).當然了還存在B+樹,B*樹,在這片文章中主要講述的是B-樹的插入和中序遍歷. 一.B-樹的性
原创 避免死鎖的銀行家算法
死鎖的定義> 如果一組進程中的每一個進程都在等待僅由該組進程中的其他進程才能引發的事件,那仫該組進程就是死鎖的. 產生死鎖的必要條件> 1).互斥條件:進程對所分配到的資源進行排它性使用,即在一段時間內,某資源只能被一個進程
原创 Huffman的應用之文件壓縮與解壓縮
文件壓縮與解壓縮> 最近這段時間一直在學習樹的這種數據結構,也接觸到了Huffman樹以及瞭解了什仫是Huffman編碼,而我們常用的zip壓縮也是利用的Huffman編碼的特性,那仫是不是可以自己實現一個文件壓縮呢?當然可以了
原创 數據結構之線索二叉樹的前序,中序和後序遍歷
BinaryTree線索化二叉樹> 二叉樹是一種非線性結構,在之前實現的二叉樹遍歷中不管是遞歸還是非遞歸用二叉樹作爲存儲結構時只能取到該結點的左孩子和右孩子,不能得到該結點的前驅和後繼。爲了保存這種在遍歷中需要的信息,同時也爲了
原创 一道關於下標排序的金山筆試題
有這樣一道筆試題它是這樣描述的:對一個數組按照給定下標排序,僅使用兩兩交換的方式,要求儘可能少的額外空間。栗子:原數組:A B C D E,假若它的排序下標爲:3 0 1 4 2,那仫排序後爲 D A B E C。 剛開始看
原创 你到底有多少個朋友圈?
有這樣一道面試題它是這樣描述的:假設有n個人m對好友(存於二維數組r),如果兩個人是直接或間接的好友(好友的好友的好友...),則認爲他們屬於同一個朋友圈,請寫程序求出這n個人裏一共有多少個朋友圈? 例:n=5,m=3,r
原创 一個簡單的內存池
爲什仫要使用內存池? 1.通常我們用new/delete和malloc/free來管理內存,可能會需要頻繁的調用內存,減少運行時間,增加效率. 2.避免內存碎片 傳統的new/delete的弊端> 1.分配內
原创 位圖的應用之海量數據查找
位圖> 一.什仫是位圖> 顧名思義位圖就是用每一位來保存數的狀態的結構.位圖是bitMap的縮寫,適用於大規模數據但是數據狀態又不是很多的情況的,因爲一個位只有0和1兩種狀態,所以位圖就是隻用每一位來保存數的狀態的結構.