freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

數(shù)據(jù)結(jié)構(gòu)處算法分析――讀書筆記-資料下載頁

2025-06-25 07:21本頁面
  

【正文】 unt。 for (i = 0。 i nCount。 ++i) { if (data == pTmpNodedata) return i + 1。 pTmpNode = pTmpNodenext。 } return 0。}endif // __DOUBLE_LIST_H__調(diào)用如下://///////////////////////////////////////////////////////////////////////////////// FileName : // Version : // Author : Luo Cong// Date : 200514 10:58:22// Comment : /////////////////////////////////////////////////////////////////////////////////include iostreaminclude using namespace std。int main(){ int i。 int nCount。 CDListint dlist。ifdef _DEBUG _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF)。endif (1)。 (3)。 (2, 2)。 (4)。 ()。 nCount = ()。 for (i = 1。 i = nCount。) { cout (i) endl。 }} 說明單鏈表的結(jié)點(diǎn)中只有一個(gè)指向直接后繼結(jié)點(diǎn)的指針,所以,從某個(gè)結(jié)點(diǎn)出發(fā)只能順著指針往后查詢其他的結(jié)點(diǎn)???,那如果我想訪問某個(gè)結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn),豈不只能重新從表頭結(jié)點(diǎn)開始了?效率真低啊!換句話說,在單鏈表中,GetNext()的時(shí)間復(fù)雜度為O(1),而GetPrev()的時(shí)間復(fù)雜度則為O(N)。為克服單鏈表這種單向性的缺點(diǎn),我們可以利用——“當(dāng)當(dāng)當(dāng)當(dāng)”,Only you,就是——雙鏈表。顧名思義,在雙鏈表的結(jié)點(diǎn)中有兩個(gè)指針,一個(gè)指向直接后繼,另一個(gè)指向直接前驅(qū),在C++語言中表示如下:struct Node{ struct Node *prior。 struct Node *next。 T data。}。大部分對(duì)雙鏈表的操作(只涉及到向后方向的指針的操作)都與單鏈表的相同,但在插入、刪除時(shí)有很大的不同,在雙鏈表中需同時(shí)修改兩個(gè)方向上的指針。因此,可以直接繼承單鏈表的類來完成雙鏈表,然后改改不一樣的函數(shù)就行了。但我沒有這樣做,別問為什么,人品問題而已。如果你已經(jīng)熟練掌握了單鏈表的指針域,那么雙鏈表的這部分應(yīng)該難不倒你了。不多說了,請(qǐng)看代碼吧。如果有bug,請(qǐng)告訴我。^_^[首頁, 上一頁, 下一頁。 目錄 ]第四章第四章循環(huán)鏈表 基本概念循環(huán)鏈表可以為單鏈表,也可以為雙鏈表,但我不想把問題搞得那么復(fù)雜,姑且就做單鏈表的循環(huán)形式吧。我們?cè)趯?shí)現(xiàn)了鏈表后,必然會(huì)提出一個(gè)問題:鏈表能不能首尾相連?怎樣實(shí)現(xiàn)?答案:能。其實(shí)實(shí)現(xiàn)的方法很簡(jiǎn)單,就是將表中最后一個(gè)結(jié)點(diǎn)的指針域指向頭結(jié)點(diǎn)即可(Pnext = head。)。這種形成環(huán)路的鏈表稱為循環(huán)鏈表。試想我們?cè)趯W(xué)校的運(yùn)動(dòng)場(chǎng)上跑步鍛煉身體(學(xué)校……好遙遠(yuǎn)的記憶?。@著400米跑道一直跑啊跑,好像永遠(yuǎn)沒有盡頭一樣。這是因?yàn)榕艿赖氖孜彩窍噙B的,跑完一圈后,“尾巴”突然就變成了“頭”,這跟循環(huán)鏈表的原理是一樣的。好了,明白了這個(gè)道理,實(shí)現(xiàn)起來就簡(jiǎn)單了,不過要注意的是,在循環(huán)鏈表里面如果要獲得結(jié)點(diǎn)的個(gè)數(shù),不能采用while()循環(huán)來遍歷表,因?yàn)檫@個(gè)循環(huán)是永不會(huì)結(jié)束的,這就像無論有多長(zhǎng)的長(zhǎng)跑比賽都可以在400米的跑道上進(jìn)行一樣。我的做法還是通過增加一個(gè)m_nCount變量,每次新增或刪除一個(gè)結(jié)點(diǎn)就對(duì)m_nCount進(jìn)行相應(yīng)的操作。循環(huán)鏈表的特點(diǎn):從任一結(jié)點(diǎn)出發(fā)均可找到表中其他結(jié)點(diǎn)。 操作僅有一點(diǎn)與單鏈表不同:循環(huán)條件。 單鏈表:P = NULL 或 Pnext = NULL 循環(huán)鏈表:P = head 或 Pnext = head 代碼實(shí)現(xiàn)循環(huán)鏈表的實(shí)現(xiàn)如下://///////////////////////////////////////////////////////////////////////////////// FileName : // Version : // Author : Luo Cong// Date : 200515 10:43:17// Comment : /////////////////////////////////////////////////////////////////////////////////ifndef __CIRC_LIST_H__define __CIRC_LIST_H__include ../../slist/src/templatetypename Tclass CCList : public CSListT{protected: CNodeT *m_pNodeCurr。public: CCList()。public: Tamp。 GetNext()。 void RemoveAt(const int pos)。 int GetCurrentIndex() const。}。templatetypename Tinline Tamp。 CCListT::GetNext(){ ASSERT(0 != m_nCount)。 if ((NULL == m_pNodeCurr) || (NULL == m_pNodeCurrnext)) m_pNodeCurr = m_pNodeHead。 else m_pNodeCurr = m_pNodeCurrnext。 return m_pNodeCurrdata。}templatetypename Tinline int CCListT::GetCurrentIndex() const{ ASSERT(0 != m_nCount)。 int i。 CNodeT *pTmpNode = m_pNodeHead。 for (i = 1。 i = m_nCount。 ++i) { if (pTmpNode == m_pNodeCurr) return i。 else pTmpNode = pTmpNodenext。 } return 0。}templatetypename Tinline void CCListT::RemoveAt(const int pos){ ASSERT(1 = pos amp。amp。 pos = m_nCount)。 int i。 CNodeT *pTmpNode1。 CNodeT *pTmpNode2。 pTmpNode1 = m_pNodeHead。 // head node? if (1 == pos) { m_pNodeHead = m_pNodeHeadnext。 // added for loop list // m_pNodeCurr will be set to m_pNodeHead in function GetNext() m_pNodeCurr = NULL。 goto Exit1。 } for (i = 1。 i pos。 ++i) { // we will get the previous node of the target node after // the for loop finished, and it would be stored into pTmpNode2 pTmpNode2 = pTmpNode1。 pTmpNode1 = pTmpNode1next。 } pTmpNode2next = pTmpNode1next。 // added for loop list m_pNodeCurr = pTmpNode2。Exit1: delete pTmpNode1。 m_nCount。}templatetypename Tinline CCListT::CCList() : m_pNodeCurr(NULL){}endif // __CIRC_LIST_H__ 說明由于循環(huán)鏈表的操作大部分是與非循環(huán)鏈表相同的,因此我的循環(huán)鏈表是直接從單鏈表繼承來的,并且新增了表示當(dāng)前結(jié)點(diǎn)的變量m_pNodeCurr,以及重載了幾個(gè)函數(shù)。但還有兩點(diǎn)是需要特別注意的:在GetNext()函數(shù)中,必須有判斷當(dāng)前結(jié)點(diǎn)應(yīng)該如何指向下一個(gè)結(jié)點(diǎn)的條件。 在RemoveAt()函數(shù)中,如果要?jiǎng)h除一個(gè)結(jié)點(diǎn),而該結(jié)點(diǎn)又恰好是頭結(jié)點(diǎn)的話,那么當(dāng)前結(jié)點(diǎn)必須指向NULL,這樣才能在GetNext()中重新獲得頭結(jié)點(diǎn)的正確的值。 關(guān)于這兩點(diǎn)應(yīng)該毫無疑問吧?呵呵,那就讓我們繼續(xù)吧……什么?你不明白第二點(diǎn)是什么意思?我倒!讓我們來假定一下,如果當(dāng)前結(jié)點(diǎn)指向了尾結(jié)點(diǎn),然后這時(shí)我們調(diào)用了GetNext(),那么很顯然,當(dāng)前結(jié)點(diǎn)就應(yīng)該指向頭結(jié)點(diǎn)了。但問題是頭結(jié)點(diǎn)已經(jīng)被我們刪除了,那么當(dāng)前結(jié)點(diǎn)還能指向哪里呢?這時(shí)什么事情都可能發(fā)生,計(jì)算機(jī)可能會(huì)格式化了你的硬盤,也可能會(huì)把你的情書送給了班里的恐龍,更可能會(huì)告訴你的老板你愿意從此以后一分錢工資都不要一直做到over為止……但最有可能發(fā)生的事情是產(chǎn)生一個(gè)內(nèi)存訪問的異常,所以,咳咳,計(jì)算機(jī)是很笨的,必須由我們親自告訴它:“頭結(jié)點(diǎn)已經(jīng)完蛋啦,所以當(dāng)前結(jié)點(diǎn)就指向NULL吧,你在GetNext()函數(shù)中自個(gè)兒給我解決好下一步的問題。”明白了嗎?還不明白的話……我…… 應(yīng)用:約瑟夫問題約瑟夫問題幾乎是最經(jīng)典的用來講解循環(huán)鏈表的案例了。為什么呢?我們來看看這個(gè)問題的描述就會(huì)明白了:有一隊(duì)由n個(gè)冒險(xiǎn)家組成的探險(xiǎn)隊(duì)深入到熱帶雨林中,但他們?cè)庥龅搅耸橙俗澹橙俗宓挠螒蛞?guī)則是讓他們圍成一圈,然后選定一個(gè)數(shù)字m,從第1個(gè)人開始報(bào)數(shù),報(bào)到m時(shí),這個(gè)人就要被吃掉了,然后從下一個(gè)人開始又重新從1報(bào)數(shù),重復(fù)這個(gè)過程,直到剩下最后一個(gè)人,這個(gè)人是幸運(yùn)者,可以離開而不被吃掉。那么問題是,誰是這個(gè)幸運(yùn)者呢?我們來舉個(gè)例子:假設(shè)這個(gè)探險(xiǎn)隊(duì)有6個(gè)探險(xiǎn)家,食人族選定的數(shù)字m是5,那么在第一輪中,5號(hào)會(huì)被吃掉,剩下的就是:1, 2, 3, 4, 6總共5個(gè)人,然后從6號(hào)開始,重新從1開始報(bào)5個(gè)數(shù):6, 1, 2, 3, 4,所以在第二輪里面被吃掉的就是4號(hào)……一直重復(fù)這個(gè)過程,按順序應(yīng)該是:5, 4, 6, 2, 3被吃掉,剩下1號(hào)活下來。解決這個(gè)問題并不是只能用循環(huán)鏈表的,但使用循環(huán)鏈表應(yīng)該是最方便的。我寫的代碼如下://///////////////////////////////////////////////////////////////////////////////// FileName : // Version : // Author : Luo Cong// Date : 200515 13:56:32// Comment : /////////////////////////////////////////////////////////////////////////////////include iostreaminclude using namespace std。int main(){ int i。 int n。 int m。 int nNumber。 int nCurIndex。 CCListint clist。ifdef _DEBUG _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF)。endif cout 請(qǐng)輸入總的人數(shù): 。 cin n。 cout 請(qǐng)輸入死亡號(hào)
點(diǎn)擊復(fù)制文檔內(nèi)容
數(shù)學(xué)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1