原创 數據結構:字符串的基本操作

字符串(string)是由0個或多個字符組成的有限序列。一般使用順序存儲結構,末尾以’\0’表示結束,但不計入字符串的長度。 示例程序:(改編自《大話數據結構》 #include<iostream> using namesp

原创 數據結構:隊列的順序存儲結構(循環隊列)

隊列(Queue)是隻允許在一端進行插入操作,而在另一端進行刪除操作的線性表。是一種先進先出的線性表(FIFO)。允許插入的一端稱爲隊尾,允許刪除的一端稱爲隊頭。我們在《棧的順序存儲結構》中發現,棧操作的top指針在Push時增大

原创 算法:圖解最小生成樹之普里姆(Prim)算法

1)算法的基本思想: 普里姆算法的基本思想:普里姆算法是一種構造最小生成樹的算法,它是按逐個將頂點連通的方式來構造最小生成樹的。 從連通網絡N = { V,E }中的某一頂點u0出發,選擇與它關聯的具有最小權值的邊(u0, v)

原创 面試題——操作系統

例題1:試解釋操作系統原理中的作業、進程、線程、管程各自的定義。 答:作業:用戶在一次解題或一個事務處理過程中要求計算機系統所做工作的集合。包括用戶程序、所需要的數據及控制命令。作業是由一系列有序的步驟組成的。 進程:一個程序在

原创 劍指Offer(面試題8~10)

查找和排序都是程序設計中常用的算法。查找相對而言較爲簡單,不外乎順序查找、二分查找、哈希表查找和二叉排序樹查找。 實現快速排序算法的關鍵在於先在數組中選擇一個數字,接下來把數組中的數字分爲兩個部分,比選擇的數字小的數字移到數組的

原创 劍指Offer(面試題19~23)

面試題19:二叉樹的鏡像 題目:請完成一個函數,輸入一個二叉樹,該函數輸出它的鏡像。 二叉樹結點的定義如下: struct BinaryTreeNode { int m_nValue;

原创 數據結構:棧的順序存儲結構

棧(stack)是限定在表尾進行插入和刪除操作的線性表。我們把允許插入和刪除的一端稱爲棧頂(top),另一端稱爲棧底(bottom),棧又稱爲後進先出(Last In First Out)的線性表,簡稱LIFO結構。 示例程

原创 數據結構:隊列的鏈式存儲結構

隊列的鏈式存儲結構,其實就是線性表的單鏈表,只不過它只能尾進頭出而已,我們把它簡稱爲鏈隊列。爲了操作上的方便,我們將隊頭指針指向鏈隊列的頭節點,而隊尾指針指向終端節點。空隊列時,front和rear都指向頭節點。 示例程序:

原创 數據結構:兩棧共享存儲空間

數組有兩個端點,兩個棧有兩個棧底,讓一個棧的棧底爲數組的始端,即下標爲0處,另一個棧爲棧的末端,即下標爲數組長度n-1處。這樣,如果兩個棧增加元素,就是兩端點向中間延伸。當top1 + 1 == top2 的時候爲棧滿。 示

原创 劍指Offer(面試題3~5)

面試題3:二維數組中的查找 題目:在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。 通過分析發現規律:首先選取數

原创 算法:圖解最小生成樹之克魯斯卡爾(Kruskal)算法

算法基本思想:設無向連通網爲G=(V, E),令G的最小生成樹爲T=(U, TE),其初態爲U=V,TE={ },然後,按照邊的權值由小到大的順序,考察G的邊集E中的各條邊。若被考察的邊的兩個頂點屬於T的兩個不同的連通分量,則將此

原创 數據結構:線性表之鏈式存儲結構

爲了表示每個數據元素ai與其直接後繼元素ai+1之間的邏輯關係,對數據ai,除了存儲其自身的信息之外,還需存儲一個指示其直接後繼的信息(即直接後繼的存儲位置)。這兩部分信息組成數據元素ai的存儲映像,稱爲結點(Node)。N個結點

原创 數據結構:棧的鏈式存儲結構

當單鏈表限定只能在頭部進行插入和刪除操作的時候,即爲鏈棧,一般我們會將單鏈表的頭指針和棧的棧頂指針top合二爲一,通常對鏈棧來說,是不需要頭節點的,因爲我們維護了棧頂指針。對於鏈棧來說,基本不存在棧滿的情況,除非內存已經沒有可以使

原创 數據結構:靜態鏈表

首先我們讓數組的元素都是由兩個數據域組成,data和cur。也就是說,數組的每一個下標都對應一個data和一個cur。數據域data用來存放數據元素,也就是通常我們要處理的數據;而遊標cur相當於單鏈表中的next指針,存放該元素

原创 劍指Offer(面試題11-13)

面試題11:數值的整除次方 題目:實現函數double Power(double base,int exponent),求base的exponent次方。不得使用庫函數,同時不需要考慮大數問題。 解析:當指數爲負數的時候,可以先