linux 中斷和設備驅動 本章介紹L i n u x內核是如何維護它支持的文件系統中的文件的,我們先介紹 V F S ( Vi r t u a lFile System,虛擬文件系統),再解釋一下L i n u x內核的真實文件系統是如何得到支持的。L i n u x的一個最重要特點就是它支持許多不同的文件系統。這使 L i n u x非常靈活,能夠與許多其他的操作系統共存。在寫這本書的時候, L i n u x共支持1 5種文件系統: e x t、 e x t 2、x i a、 m i n i x、 u m s d o s、 msdos 、v f a t、 p r o c、 s m b、 n c p、 i s o 9 6 6 0、 s y s v、 h p f s、 a ffs 和u f s。無疑隨著時間的推移,L i n u x支持的文件系統數還會增加。
上傳時間: 2013-11-13
上傳用戶:zxh122
這是一個三次樣條插值的.m程序 輸入的是一個二維數組A(Nx2) 插值方法為: S(x) = A(J) + B(J)*( x - x(J) ) + C(J)*( x - x(J) )**2 +D(J) * ( x - x(J) )**3 for x(J) <= x < x(J + 1)
上傳時間: 2013-12-14
上傳用戶:gengxiaochao
Windows7下IE 8使用技巧5則 IE幾乎是各位菜鳥、大蝦上網時的首選瀏覽器,有關它的常規使用技巧,相信各位早已是耳熟能詳了。只要你足夠用心、細心,就一定會不斷“挖掘”出IE新的使用技巧來。不信,就來看看下面的幾則新鮮用法吧,相信會讓各位有耳目一新之感! 1.尋找失落的IE啟動按鈕 正常情況下,IE瀏覽器的快速啟動按鈕會在系統任務欄中“安家落戶”,可是一旦操作不小心,往往會導致IE瀏覽器的快速啟動按鈕在任務欄中“消失”。那么 你面對IE啟動按鈕從系統任務欄中消失時,你該如何去將它尋找回來呢?其實方法很簡單,只要你按照下面的步驟來進行操作就可以了。 首先用鼠標右鍵單擊桌面中的IE瀏覽器圖標,從彈出的快捷菜單中執行“創建快捷方式”命令,這樣就能為IE瀏覽器創建好一個對應的快捷方式。 接著打開系統資源管理窗口,依次雙擊C盤中的“Windows”文件夾、“ApplicationData”文件夾、“Microsoft”文件夾、 “InternetExplorer”文件夾、“QuickLaunch”文件夾;然后將桌面中創建好的IE快捷方式,直接拖動到 “QuickLaunch”文件夾窗口中。 當然還有更簡潔的方法,那就是直接將系統桌面中的IE瀏覽器圖標,用鼠標左鍵拖動到系統任務欄中,不過在拖放時一定要在出現虛線圖標之后才可以。 2.讓IE也能斷點續傳 大家知道,單擊IE頁面中的某個下載鏈接地址時,IE就會自動調用其內置的下載功能來下載文件;不過這種功能一旦遇到網絡堵塞而掉線的情況時,就會將已經下載好的內容全部丟失,以后再次下載時還需要從頭再來,顯然IE內置的下載功能容易耽誤下載時間。 那么我們有沒有辦法讓IE的下載功能也支持斷點續傳呢?答案是肯定的。只要你使用IE來下載文件出現意外掉線時,或者發現IE下載進度條長時間沒有任何反 應時,請不要單擊該下載對話框中的“取消”按鈕,而應該直接單擊該窗口中的“x”按鈕,來暫時退出下載狀態;接著重新單擊網頁中的這個下載鏈接地址,然后 再單擊“保存”按鈕,在彈出的保存對話框中,將文件名和保存路徑都設置為與上次沒下載完時的文件相同,這樣IE就能接著上次沒下載完的位置,繼續下載余下 的內容;當然這種IE斷點續傳功能只適合HTTP下載方式,而不適合FTP下載方式。 3.將IE選項設置“架空” 倘若允許其他人隨意對IE的上網參數進行設置的話,那么IE的安全、甚至系統的安全都會受到威脅,例如一旦非法用戶打開IE瀏覽器的“Internet選 項”設置框,將上網安全級別降低的話,那么網絡中的各種病毒、木馬,都有可能就會隨之而來。為了確保安全,你有時必須“架空”IE瀏覽器中的 Internet選項,讓非法用戶無法自行設置IE上網參數: 首先打開Windows系統的資源管理器窗口,找到并進入到“system32”文件夾窗口,選中其中的“inetcpl.cpl”文件,并用鼠標右鍵單 擊之,從彈出的右鍵菜單中,單擊“重命名”選項,將“inetcpl.cpl”的文件名稱更名為“inetcplnew.cpl”,當然你也能將其換成其 他名稱,不過你一定要將更名后的文件名稱記得,以后需要恢復時以便能快速找到。完成重命名操作后,再單擊IE瀏覽器中的“Internet選項”命令時, 就不能進入到選項設置窗口了。 4.不用工具也能修復IE 在網上盡情沖浪時,IE難免會遭遇惡意攻擊;那么面對被惡意修改的IE,你該如何去恢復它呢?大多數人都會去選用各種專業的IE修復工具,來對付IE的惡意攻擊;也有水平高一些的“大蝦”,通過手工修改注冊表的方法,來恢復IE的本來“面貌”??墒钱斈闶诸^沒有專業的IE修復工具可以利用時,或者自己對注冊表了解不深時,你該如何去修復IE呢?為此,本文為你提供一則非常便利的解決方法,不過該方法只能適合Windows2000或WindowsXP操作系統,下面就是該方法的具體實現步驟: 依次單擊“開始”/“設置”/“控制面板”命令,然后依次雙擊“管理工具”/“計算機管理”圖標,在隨后彈出的窗口中,依次展開“系統工具”/“本地用戶 和組”文件夾,再單擊“用戶”選項,在對應的右邊子窗口中,右擊空白區域,執行快捷菜單中的“新用戶”命令,將新用戶命名為“newusr”,同時設置好 該賬號的訪問密碼; 完成新用戶的創建任務后,依次單擊“開始”/“關機”命令,然后執行“注銷Administrator”操作,再改用“newusr”賬號重新進入到 Windows2000系統;接著打開系統注冊表編輯界面,依次展開注冊表分支HKEY_CURRENT_USER\Software \Microsoft\InternetExplorer,并將“InternetExplorer”主鍵選中,再依次單擊注冊表菜單欄中的“注冊表”/ “導出注冊表文件”命令,將有關IE部分的注冊表分支內容導出,例如保存為“ienew.reg”文件,如此一來你就能將“newusr”賬號下關于IE 的正確設置全部導出來了;由于“newusr”賬號是剛剛新建的,因此該賬號下的IE設置都是系統默認的正確設置,也就是說它是沒有被攻擊過的; 下面注銷“newusr”賬號,再以“Administrator”賬號登錄系統;然后打開注冊表編輯窗口,依次執行菜單欄中的 “注冊表”/“導入注冊表文件”命令,在彈出的文件選擇對話框中,將前面導出的“ienew.reg”文件導入到注冊表中,就能使IE恢復本來“面貌” 了。 當然,這樣的方法比較麻煩,因此我們推薦IE一鍵修復 0.3(點擊官方下載)167K ,中文綠色免費軟件,可以一鍵修復被惡意篡改的IE瀏覽器。此外,在魔方(點此下載)中,也將加入IE的修復功和監控惡意軟件等安全功能。 5. 找回Windows 7中的IE 8桌面圖標 在Windows 7中,由于超級任務欄的存在,微軟取消了IE 8的桌面圖標設置,也就是說,在Windows 7中,無法在桌面顯示IE 8圖標,當然,快捷方式是不能算的。不過近來有會員在論壇為我們提供了一個很好的辦法,可以以"曲線"的方式實現IE 8圖標桌面顯示。盡管還不完美,但基本的功能都具備了,大家可以通過Windows7優化大師 - 美化大師 - 系統外觀來自行設置。 善用快捷鍵,玩轉Windows 7 便簽程序 便箋是一種可以粘貼在任意位置的正方形或長條形紙條,方便我們隨時記錄一些信息,或是安排日常工作,隨寫隨記,非常方便。在 Windows 中為我們提供了和實物便箋一樣功能的小程序,本人非常喜歡。在 Vista 中,這個小程序作為邊欄小工具出現,但在 Windows 7 中已經成為了一個標準的Windows附件程序。 依次點擊Windows7的開始菜單按鈕 -》所有程序 -》附件 -》,點擊打開便簽,如下圖所示: 不用軟件,非會員徹底去除QQ2009/2010廣告 昨天談到了《不是VIP用戶也不怕 不需任何補丁屏蔽迅雷廣告》,用戶反饋非常的多,如果沒能設置成功的,請仔細閱讀步驟,100%的可以搞定的,當然,如果迅雷再發新版升級后,就不保證了,有任何新的變化,請隨時關注Windows7之家和Vista之家首頁。 說完了迅雷,我們再來說下QQ吧,QQ的免費用戶數量除了Windows外,就屬它大了。 屏蔽廣告除了更干凈潔爽之外,更大的好處是不用隨時下載體積大的flash動畫和gif動畫圖片了,QQ登陸速度顯著提升,同時,也少了帶寬消耗。 非QQ會員徹底屏蔽QQ2009正式版廣告: 在QQ2009 Beta版的時候,可以通過刪除一些文件讓非會員也能實現去廣告的目的,可惜從QQ2009正式版起增加了文件完整性檢查,刪除文件會導致QQ無法啟動,并要求重新安裝。 那么對于非會員來說,QQ2009正式版(包括之后的SP6、SP5、SP4、SP3、SP2、SP1等)就不能手動去廣告了嗎? 其實還是有辦法的,而且做起來也不難,你說是用第三方工具? 不需要!只要你對Windows操作系統稍有了解就可以輕松搞定,除了QQ2009,您也可以把這些招數用在QQ2010的測試版中,幾乎完全一樣。 下面,就把找到的方法共享給大家吧! 在開始之前,請先退出您正在運行中的QQ。 1、去除騰訊迷你首頁: 對于每次啟動QQ后,都彈出的“騰訊迷你首頁”,很多人一定感到不爽,就讓我們先拿它開刀吧。 首先進入QQ的安裝文件夾,接著進入 Plugin\Com.Tencent.Advertisement\bin 文件夾,這里你會看到一個Advertisement.dll文件,它就是迷你首頁的關鍵所在,只需將這個文件改成只讀屬性,以后啟動QQ就不會再看到迷你首頁了。在這個文件上面點擊鼠標右鍵,點擊屬性,勾選只讀,確定退出。 2、去除聊天窗口右上角廣告: 這個操作針對XP、Win2003系統用戶和Vista、Windows7、Win2008略有不同,主要是文件夾路徑上的。 1)XP、Win2003系統用戶操作方法: 進入 X:\Documents and Settings\用戶名\Application Data\Tencent\QQ\Misc\com.tencent.advertisement (注意,X指的系統所在盤盤符,一般是C),首先刪除這個文件夾里面的所有文件,注意文件夾本身不能刪除,然后把當前用戶的寫入權限給拒絕掉(需要當前分區為NTFS格式)。 方法:文件夾上右鍵,屬性 - 安全標簽,選中當前登錄用戶,接著在下方“寫入”權限里,拒絕上打勾。 2)Vista、Windows7、Win2008用戶的操作: 進入 X:\users\用戶名\appdata\Roaming\Tencent\QQ\Misc\com.tencent.advertisement,在這個文件上面點擊鼠標右鍵,點擊屬性,然后點擊安全標簽, 選中你的當前用戶,如下圖示例中的Ruamei.com,然后點擊“編輯”按鈕,OK,寫入那兒設置下拒絕吧。 這樣,無論是會員還是非會員,你都不會有任何的廣告圖片下載了。 3、去除QQ2009/QQ2010聊天窗口的左下角廣告 如今的聊天窗口,除了右上角的圖片廣告外,左下角還多了一條文字廣告,既然要去廣告,那么這塊自然也不能遺忘。同樣操作針對XP、Win2003系統用戶和Vista、Windows7、Win2008而有所不同。 1)XP、Win2003系統用戶操作方法: 再次提醒您修改前首先要關閉QQ,然后進入X:\Documents and Settings\用戶名\Application Data\Tencent\Users\你的QQ號\QQ\(注意,X指的系統所在盤盤符,一般是C),刪除其中的Misc.db,接著新建一個文件夾并命名為Misc.db(是不是和防止U盤自動運行病毒的方法很像)。 2)Vista、Windows7、Win2008用戶的操作: 關閉QQ后,進入X:\users\用戶名\appdata\Roaming\Tencent\Users\你的QQ號碼\QQ\,然后操作同上。 搞定,如此一來,這幾個地方都沒廣告了吧! 好吧,打開一個標簽窗口如下圖所示,當然,你可以多點多開。 如果你正在使用這個程序,是否覺得它的功能太簡單了,點點右鍵,彈出的菜單中只能切換便箋的顏色,沒有其他基本的格式編輯功能。 其實,除了標準的 Ctrl 加 XCVA 的剪切/復制/粘貼/全選快捷鍵之外,其實便箋程序還有一些快捷鍵可以使用: 快捷鍵 功能 Ctrl+N 新建一張便箋 Ctrl+D 刪除當前便箋 Ctrl+E 居中對齊 Ctrl+R 右對齊 Ctrl+J 左對齊 Ctrl+I 斜體 Ctrl+B 粗體 Ctrl+U 下劃線 Ctrl+T 刪除線 Ctrl+Shift+> 加大選中文字的字號 Ctrl+Shift+< 縮小選中文字的字號 Ctrl+Shift+L 在文字前添加項目符號和編號(反復按可循環切換)。其中編號包括數字、大小寫字母、大小寫羅馬數字幾種形式。連按兩次回車可取消。 知道了這些快捷鍵,我們就可以做出一些滿足日常需要的格式了: 像 Windows 這種應用廣泛的軟件或硬件,由于全球數十億人都會使用到,因此一個小小的功能特性都可以對世界造成很大的影響。 想想看,如果所有人都利用好這個小程序而不去買便箋,往小了說是省錢,往大了說可是環保了,能節約很多制作便箋的自然資源消耗。
上傳時間: 2019-06-22
上傳用戶:yerbol
當許多編程人員從事這項工作但又不使用源代碼管理工具時,源代碼管理幾乎不可能進行。Visual SourceSafe是Visual Basic的企業版配備的一個工具,不過這個工具目的是為了保留一個內部應用版本,不向公眾發布(應當說明的是,M i c r o s o f t并沒有開發Visual SourceSafe,它是M i c r o s o f t公司買來的) 。雖然Visual SourceSafe有幫助文本可供參考,但該程序的一般運行情況和在生產環境中安裝 Visual SourceSafe的進程都沒有詳細的文字說明。另外,Visual SourceSafe像大多數M i c r o s o f t應用程序那樣經過了很好的修飾,它包含的許多功能特征和物理特征都不符合 Microsoft Wi n d o w s應用程序的標準。例如,Visual SourceSafe的三個組件之一(Visual SourceSafe Administrator)甚至連F i l e菜單都沒有。另外,許多程序的菜單項不是放在最合適的菜單上。在程序開發環境中實現Visual SourceSafe時存在的復雜性,加上它的非標準化外觀和文檔資料的不充分,使得許多人無法實現和使用 Visual SourceSafe。許多人甚至沒有試用 Vi s u a l S o u r c e S a f e的勇氣。我知道許多高水平技術人員無法啟動Visual SourceSafe并使之運行,其中有一位是管理控制系統項目師。盡管如此,Visual SourceSafe仍然不失為一個很好的工具,如果你花點時間將它安裝在你的小組工作環境中,你一定會為此而感到非常高興。在本章中我并不是為你提供一些指導原則來幫助你創建更好的代碼,我的目的是告訴你如何使用工具來大幅度減少管理大型項目和開發小組所需的資源量,這個工具能夠很容易處理在沒有某種集成式解決方案情況下幾乎無法處理的各種問題。
上傳時間: 2013-10-24
上傳用戶:lgd57115700
迄今為止,本書已介紹了可在Microsoft Wi n d o w s操作系統中使用的全部網絡A P I函數。 利用這些函數,我們的應用程序可通過網絡,建立與其他程序的通信聯系。在那些討論中, 我們在很大程度上將重點放在七層O S I模型的應用層和表示層上面
標簽:
上傳時間: 2015-07-08
上傳用戶:royzhangsz
GM(1,1)模型1-4 1:GM(1,1)模擬模型,在matlab中的輸入方法為gm1(x),x指要模擬的序列。 2:GM(1,1)預測模型,在matlab中的輸入方法為gm2(x,K),x指要模擬的序列,K指從以后序列第一個數據算起的第k個待預測數據。 3:GM(1,1)群模擬模型,在matlab中的輸入方法為gm3(x),x指要模擬的序列。 4:GM(1,1)群預測模型,在matlab中的輸入方法為gm4(x,K),x指要模擬的序列,K指從以后序列第一個數據算起的第k個待預測數據。 gm4對序列趨勢比較好的數據預測效果較好,對上下變動的數據,特別是后4個數據趨勢跟前面的數據相反的,預測效果很差。 gm2對上下變動的數據,預測效果比gm4好,但對趨勢較好的數據,預測精度沒有gm4高。 gm3比gm1模擬精度要高。 可以以x=[1 3 5 7 9 11 13 15]進行實驗。x輸入默認行向量。 所有程序在matlab6.0上調試通過。
上傳時間: 2013-11-29
上傳用戶:jackgao
struts的詳細說明,是struts的經典經驗集合,對于做web開發的技術人員來說恨合適d o dio 哦!感覺寫的恨不錯就發上來了!
標簽: struts
上傳時間: 2016-01-01
上傳用戶:懶龍1988
一款類似百度知道系統的問題解答系統,問題頁面自動生成靜態網頁- M( ]- `+ X0 x 系統特色: + O$ U8 n- [ z# {/ E本系統結合了仿百度知道程序和仿新浪愛問程序的共同優點,設計更加合理 6 X) H8 a5 t9 h& D6 e8 S9 p2 P 問題頁面實時生成靜態頁面,減少系統開銷,更利于搜索引擎的收錄 ! f5 U& N3 J+ B7 I" S完美使用系統緩存,減少數據庫讀取次數 b T |, g1 v9 \" E* Z 完善的后臺管理功能 # u5 C: I- c$ P6 P( H9 S2 w支持問題的附件上傳 . U! K+ k ~) o 對搜索引擎的優化:支持Keywords和Description頁面頭部標簽的自定義 6 ^! h: m- U4 p( z# X支持 JS 代碼的問題調用 t8 E5 ]) b3 M8 x* z提供與動網、oblog、動易實現用戶整合的標準接口 ) {4 \ ` ]1 g1 F8 u
標簽: 百度
上傳時間: 2013-11-28
上傳用戶:ztj182002
#include <malloc.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define NULL 0 #define MaxSize 30 typedef struct athletestruct /*運動員*/ { char name[20]; int score; /*分數*/ int range; /**/ int item; /*項目*/ }ATH; typedef struct schoolstruct /*學校*/ { int count; /*編號*/ int serial; /**/ int menscore; /*男選手分數*/ int womenscore; /*女選手分數*/ int totalscore; /*總分*/ ATH athlete[MaxSize]; /**/ struct schoolstruct *next; }SCH; int nsc,msp,wsp; int ntsp; int i,j; int overgame; int serial,range; int n; SCH *head,*pfirst,*psecond; int *phead=NULL,*pafirst=NULL,*pasecond=NULL; void create(); void input () { char answer; head = (SCH *)malloc(sizeof(SCH)); /**/ head->next = NULL; pfirst = head; answer = 'y'; while ( answer == 'y' ) { Is_Game_DoMain: printf("\nGET Top 5 when odd\nGET Top 3 when even"); printf("\n輸入運動項目序號 (x<=%d):",ntsp); scanf("%d",pafirst); overgame = *pafirst; if ( pafirst != phead ) { for ( pasecond = phead ; pasecond < pafirst ; pasecond ++ ) { if ( overgame == *pasecond ) { printf("\n這個項目已經存在請選擇其他的數字\n"); goto Is_Game_DoMain; } } } pafirst = pafirst + 1; if ( overgame > ntsp ) { printf("\n項目不存在"); printf("\n請重新輸入"); goto Is_Game_DoMain; } switch ( overgame%2 ) { case 0: n = 3;break; case 1: n = 5;break; } for ( i = 1 ; i <= n ; i++ ) { Is_Serial_DoMain: printf("\n輸入序號 of the NO.%d (0<x<=%d): ",i,nsc); scanf("%d",&serial); if ( serial > nsc ) { printf("\n超過學校數目,請重新輸入"); goto Is_Serial_DoMain; } if ( head->next == NULL ) { create(); } psecond = head->next ; while ( psecond != NULL ) { if ( psecond->serial == serial ) { pfirst = psecond; pfirst->count = pfirst->count + 1; goto Store_Data; } else { psecond = psecond->next; } } create(); Store_Data: pfirst->athlete[pfirst->count].item = overgame; pfirst->athlete[pfirst->count].range = i; pfirst->serial = serial; printf("Input name:) : "); scanf("%s",pfirst->athlete[pfirst->count].name); } printf("\n繼續輸入運動項目(y&n)?"); answer = getchar(); printf("\n"); } } void calculate() /**/ { pfirst = head->next; while ( pfirst->next != NULL ) { for (i=1;i<=pfirst->count;i++) { if ( pfirst->athlete[i].item % 2 == 0 ) { switch (pfirst->athlete[i].range) { case 1:pfirst->athlete[i].score = 5;break; case 2:pfirst->athlete[i].score = 3;break; case 3:pfirst->athlete[i].score = 2;break; } } else { switch (pfirst->athlete[i].range) { case 1:pfirst->athlete[i].score = 7;break; case 2:pfirst->athlete[i].score = 5;break; case 3:pfirst->athlete[i].score = 3;break; case 4:pfirst->athlete[i].score = 2;break; case 5:pfirst->athlete[i].score = 1;break; } } if ( pfirst->athlete[i].item <=msp ) { pfirst->menscore = pfirst->menscore + pfirst->athlete[i].score; } else { pfirst->womenscore = pfirst->womenscore + pfirst->athlete[i].score; } } pfirst->totalscore = pfirst->menscore + pfirst->womenscore; pfirst = pfirst->next; } } void output() { pfirst = head->next; psecond = head->next; while ( pfirst->next != NULL ) { // clrscr(); printf("\n第%d號學校的結果成績:",pfirst->serial); printf("\n\n項目的數目\t學校的名字\t分數"); for (i=1;i<=ntsp;i++) { for (j=1;j<=pfirst->count;j++) { if ( pfirst->athlete[j].item == i ) { printf("\n %d\t\t\t\t\t\t%s\n %d",i,pfirst->athlete[j].name,pfirst->athlete[j].score);break; } } } printf("\n\n\n\t\t\t\t\t\t按任意建 進入下一頁"); getchar(); pfirst = pfirst->next; } // clrscr(); printf("\n運動會結果:\n\n學校編號\t男運動員成績\t女運動員成績\t總分"); pfirst = head->next; while ( pfirst->next != NULL ) { printf("\n %d\t\t %d\t\t %d\t\t %d",pfirst->serial,pfirst->menscore,pfirst->womenscore,pfirst->totalscore); pfirst = pfirst->next; } printf("\n\n\n\t\t\t\t\t\t\t按任意建結束"); getchar(); } void create() { pfirst = (struct schoolstruct *)malloc(sizeof(struct schoolstruct)); pfirst->next = head->next ; head->next = pfirst ; pfirst->count = 1; pfirst->menscore = 0; pfirst->womenscore = 0; pfirst->totalscore = 0; } void Save() {FILE *fp; if((fp = fopen("school.dat","wb"))==NULL) {printf("can't open school.dat\n"); fclose(fp); return; } fwrite(pfirst,sizeof(SCH),10,fp); fclose(fp); printf("文件已經成功保存\n"); } void main() { system("cls"); printf("\n\t\t\t 運動會分數統計\n"); printf("輸入學校數目 (x>= 5):"); scanf("%d",&nsc); printf("輸入男選手的項目(x<=20):"); scanf("%d",&msp); printf("輸入女選手項目(<=20):"); scanf("%d",&wsp); ntsp = msp + wsp; phead = (int *)calloc(ntsp,sizeof(int)); pafirst = phead; pasecond = phead; input(); calculate(); output(); Save(); }
標簽: 源代碼
上傳時間: 2016-12-28
上傳用戶:150501
#include <iostream> #include <stdio.head> #include <stdlib.head> #include <string.head> #define ElemType int #define max 100 using namespace std; typedef struct node1 { ElemType data; struct node1 *next; }Node1,*LinkList;//鏈棧 typedef struct { ElemType *base; int top; }SqStack;//順序棧 typedef struct node2 { ElemType data; struct node2 *next; }Node2,*LinkQueue; typedef struct node22 { LinkQueue front; LinkQueue rear; }*LinkList;//鏈隊列 typedef struct { ElemType *base; int front,rear; }SqQueue;//順序隊列 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 //1.采用鏈式存儲實現棧的初始化、入棧、出棧操作。 LinkList CreateStack()//創建棧 { LinkList top; top=NULL; return top; } bool StackEmpty(LinkList s)//判斷棧是否為空,0代表空 { if(s==NULL) return 0; else return 1; } LinkList Pushead(LinkList s,int x)//入棧 { LinkList q,top=s; q=(LinkList)malloc(sizeof(Node1)); q->data=x; q->next=top; top=q; return top; } LinkList Pop(LinkList s,int &e)//出棧 { if(!StackEmpty(s)) { printf("棧為空。"); } else { e=s->data; LinkList p=s; s=s->next; free(p); } return s; } void DisplayStack(LinkList s)//遍歷輸出棧中元素 { if(!StackEmpty(s)) printf("棧為空。"); else { wheadile(s!=NULL) { cout<<s->data<<" "; s=s->next; } cout<<endl; } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 //2.采用順序存儲實現棧的初始化、入棧、出棧操作。 int StackEmpty(int t)//判斷棧S是否為空 { SqStack.top=t; if (SqStack.top==0) return 0; else return 1; } int InitStack() { SqStack.top=0; return SqStack.top; } int pushead(int t,int e) { SqStack.top=t; SqStack.base[++SqStack.top]=e; return SqStack.top; } int pop(int t,int *e)//出棧 { SqStack.top=t; if(!StackEmpty(SqStack.top)) { printf("棧為空."); return SqStack.top; } *e=SqStack.base[s.top]; SqStack.top--; return SqStack.top; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 //3.采用鏈式存儲實現隊列的初始化、入隊、出隊操作。 LinkList InitQueue()//創建 { LinkList head; head->rear=(LinkQueue)malloc(sizeof(Node)); head->front=head->rear; head->front->next=NULL; return head; } void deleteEle(LinkList head,int &e)//出隊 { LinkQueue p; p=head->front->next; e=p->data; head->front->next=p->next; if(head->rear==p) head->rear=head->front; free(p); } void EnQueue(LinkList head,int e)//入隊 { LinkQueue p=(LinkQueue)malloc(sizeof(Node)); p->data=e; p->next=NULL; head->rear->next=p; head->rear=p; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 //4.采用順序存儲實現循環隊列的初始化、入隊、出隊操作。 bool InitQueue(SqQueue &head)//創建隊列 { head.data=(int *)malloc(sizeof(int)); head.front=head.rear=0; return 1; } bool EnQueue(SqQueue &head,int e)//入隊 { if((head.rear+1)%MAXQSIZE==head.front) { printf("隊列已滿\n"); return 0; } head.data[head.rear]=e; head.rear=(head.rear+1)%MAXQSIZE; return 1; } int QueueLengthead(SqQueue &head)//返回隊列長度 { return (head.rear-head.front+MAXQSIZE)%MAXQSIZE; } bool deleteEle(SqQueue &head,int &e)//出隊 { if(head.front==head.rear) { cout<<"隊列為空!"<<endl; return 0; } e=head.data[head.front]; head.front=(head.front+1)%MAXQSIZE; return 1; } int gethead(SqQueue head)//得到隊列頭元素 { return head.data[head.front]; } int QueueEmpty(SqQueue head)//判斷隊列是否為空 { if (head.front==head.rear) return 1; else return 0; } void travelQueue(SqQueue head)//遍歷輸出 { wheadile(head.front!=head.rear) { printf("%d ",head.data[head.front]); head.front=(head.front+1)%MAXQSIZE; } cout<<endl; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 //5.在主函數中設計一個簡單的菜單,分別測試上述算法。 int main() { LinkList top=CreateStack(); int x; wheadile(scanf("%d",&x)!=-1) { top=Pushead(top,x); } int e; wheadile(StackEmpty(top)) { top=Pop(top,e); printf("%d ",e); }//以上是鏈棧的測試 int top=InitStack(); int x; wheadile(cin>>x) top=pushead(top,x); int e; wheadile(StackEmpty(top)) { top=pop(top,&e); printf("%d ",e); }//以上是順序棧的測試 LinkList Q; Q=InitQueue(); int x; wheadile(scanf("%d",&x)!=-1) { EnQueue(Q,x); } int e; wheadile(Q) { deleteEle(Q,e); printf("%d ",e); }//以上是鏈隊列的測試 SqQueue Q1; InitQueue(Q1); int x; wheadile(scanf("%d",&x)!=-1) { EnQueue(Q1,x); } int e; wheadile(QueueEmpty(Q1)) { deleteEle(Q1,e); printf("%d ",e); } return 0; }
上傳時間: 2018-05-09
上傳用戶:123456..