原创 用冒泡排序—整數序列、字符串序列

分析:冒泡排序原理:如果升序排序,將一組整數序列的第一個元素和第二個元素相比較,如果第一個元素大於第二個元素,那麼交換這兩個元素,如果不滿足條件就不交換;然後將第二個元素和第三個元素比較,直到和最後一個元素和它前面的一個元素比較後,第一次排

原创 用冒泡排序的方法模擬實現qsort函數

分析:用冒泡排序的方法實現快速排序主要是用回調函數的知識,我們知道庫函數中qsort的函數原型是: void qsort( void *base, size_t num, size_t width, int (__cdecl *compar

原创 C++模板實現順序表

#include<iostream> #include<string> using namespace std;   template<typename T> class SeqList { public:      SeqList()  

原创 我的友情鏈接

前進C語言100-200素數

原创 旋轉數組的最小數字

題目:把一個數組最開始的若干個元素搬到數組的末尾,我們稱之爲數組的旋轉,輸入一個遞增排序的數組的一個旋轉,輸出旋轉數組的最小元素。例如數組{3,4,5,1,2}是數組{1,2,3,4,5}的一個旋轉,該數組的最小值爲1。題目分析:我們可以通

原创 c++動態內存管理

我們都知道在c++中可以用new/malloc動態分配內存空間用delete/free釋放動態開闢的內存空間。c++中的malloc/free是繼承c語言中的malloc/free,它的用法和在C語言中的用法一模一樣。 1.那麼既然c++中

原创 string類的寫時拷貝

由於淺拷貝使多個對象共用一塊內存地址,調用析構函數時導致一塊內存被多次釋放,導致程序奔潰。實現string類的時候通常顯示的定義拷貝構造函數和運算符重載函數。 由於釋放內存空間,開闢內存空間時花費時間,因此,在我們在不需要寫,只是讀的時候就

原创 鏈表常見面試題三:解決鏈表帶環問題

問題1:判斷鏈表是否帶環解題思路:用兩個指針,快指針一次走兩步,慢指針一次走一步,如果兩指針相遇,那麼鏈表帶環,若兩指針不相遇,則鏈表不帶環。pLinkNode CheckCycle(pList head) {  pLinkNode fas

原创 鏈表常見面試題一:基本問題

本文列舉出了7個鏈表常見的面試題,其他面試題請閱讀下一篇博客 面試題1:刪除非尾節點刪除非尾節點,只告訴一個當前節點的位置,將該位置的節點刪除。解題思路:刪除該位置的節點,由於我們不知道它的前一個節點的位置,不能直接將它的前一個節點與它的後

原创 模擬new[]和delete[]操作符開闢內存空間及釋放內存空間過程

在上一篇博客裏我們知道了new[]和delete[]開闢空間和釋放空間時過程,那麼我們可不可以模擬實現一下它們的開闢內存和釋放內存的過程呢?下面是我模擬new[]和delete[]的實現過程:根據上圖我們可以模擬new[]和delete[]

原创 模擬實現c++標準庫和boost庫中的智能指針

我們知道c++標準庫中定義了智能指針auto_ptr,但是我們很少用它,因爲雖然它能夠自動回收動態開闢的內存,不需要程序員自己去維護動態開闢的內存,但是當用它去賦值或者是拷貝構造時有一個管理權轉移的過程,這樣我們就不能很方便的使用auto_

原创 探索c++對象模型

c++中多態的實現我們都知道,c++中的多態是在虛函數的基礎上實現的,用指向派生類的基類指針調用派生類(或基類)中自己的成員函數。那麼,具體是怎麼實現的呢?其實它是通過虛函數表來實現的,虛函數表是保存虛函數地址的一張表,若一個類中有虛函數,

原创 C++模板實現順序表

#include<iostream> #include<string> using namespace std;   template<typename T> class SeqList { public:      SeqList()  

原创 鏈表常見面試題二:約瑟夫環

面試題1:約瑟夫環約瑟夫環故事背景:著名猶太歷史學家 Josephus有過以下的故事:在羅馬人佔領喬塔帕特後,39 個猶太人與Josephus及他的朋友躲到一個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了一個自殺方式,41個人排

原创 c++實現棧

棧的概念棧是數據結構中一種特殊的線性表,它的基本特性是“先入後出,後入先出”。如下圖:棧的基本操作棧有基本操作如下:void Push(const T& d);//入棧 void Pop();//出棧 T& Top();//返回棧頂元素 b