999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

巧用堆棧與隊列解決撲克牌排序問題*

2014-03-24 01:43:10葉青鄒軍華
中國教育技術裝備 2014年20期
關鍵詞:程序

◆葉青 鄒軍華

作者:葉青、鄒軍華,湖北大學教育學院(430062)。

數據結構的主要內容包括將現實世界轉化為在計算機世界中的抽象的數據描述,數據在計算機中的組織以及不同數據類型的基本操作實現等,是相對比較難于理解和掌握的課程。學生學習的積極性不僅關系到對數據結構課程的掌握程度,而且影響到對整個專業知識的掌握。因此,可以通過自己設計問題、分析問題并靈活運用所學知識解決問題的方式來增強學習興趣。

本文通過數據結構中堆棧和隊列的基本方法來解決一個撲克牌排序問題,通過C語言進行編程和調試程序,能夠利用C語言編寫簡單程序,加深對教學內容的理解,驗證所學的算法和數據結構,培養設計數據結構的能力和根據數據結構設計算法的能力,掌握非數值問題的數據結構和算法的設計方法,通過對具體問題的分析、設計和實現,培養實踐能力。在設計問題、解決問題的過程中,既很好地培養了創造能力、抽象思維能力和邏輯思維能力,也能幫助學生更好地理解算法的思考過程,更主要的是能夠將課程中所學到的知識靈活運用,做到舉一反三,活學活用。

1 問題描述

任意輸入撲克牌的張數n,程序按一定算法排序后,輸出一列數字,使得這列數字經過下列操作后,得到一串由小到大排列的撲克牌數字。首先按照程序輸出的數字序列將這些撲克牌從上往下排放。每次將這疊撲克牌最上面的一張移到最下面后,移出此時撲克牌最上面的—張;重復這個操作,直到這疊撲克牌全部移出時停止操作。

例如,當用戶輸入3時,程序輸出213三個數,撲克牌從上往下依次是2、1、3:

1)將2移到撲克牌的末尾(3的后面),將1移出撲克牌隊列,剩下:

2)將3移到撲克牌的末尾(2的后面),將2移出撲克牌隊列,剩下:

3)最后將3移出。

可以看到,按照2、1、3的次序拍好后,依次將最上面的一張撲克牌放到最下面后,移出此時撲克牌最上面的—張撲克牌,三張撲克牌是按從小到大移出的。

問題是:當用戶輸入任意撲克牌的張數n時,如何得到正確的撲克牌序列,使得用戶能夠進行上述操作。在熟悉堆棧和隊列的特點后,可以巧用堆棧和隊列的方法來設計程序。

2 算法分析

此算法要用到堆棧和隊列的基本實現和操作。棧和隊列是兩種重要的線性結構,它們是操作受限的線性表,稱為限定性的數據結構。

棧是限定僅在表尾進行插入或刪除操作的線性表,允許進行插入、刪除操作的一端稱為棧頂,固定端為棧底,它有兩種存儲表示方法:順序表示和鏈式表示。棧的順序存儲結構(即順序棧)是利用一組連續的存儲單元依次存放自棧底到棧頂的數據元素,限定插入和刪除操作只能在線性表的一端進行,又稱為后進先出線性表。稱插入操作為進棧,刪除操作為出棧。棧的基本操作除了在棧頂進行插入或刪除外,還有棧的初始化、判空操作、銷毀操作、置空操作以及取棧頂元素等。

圖1 程序運行結果

而隊列與棧不同,它是一種先進先出的線性表,只允許在表的一端進行插入,而在另一端刪除元素。允許刪除的一端稱為隊首,允許插入的一端叫做隊尾。稱插入操作為入隊,刪除操作為出隊。第一個出隊的元素為隊頭元素,最后一個出隊的元素為隊尾元素。其基本操作與棧的操作類似,也有出隊操作、入隊操作、初始化、判空操作、銷毀操作、置空操作、取隊頭元素等,不同的是,刪除是在表的頭部(即隊頭)進行。

在此程序中,輸入數字個數n之后,為了讓后面的撲克牌先處理,要用到堆棧操作,即讓連續1~n張撲克牌全部入棧(此時棧元素個數為n,棧不為空),然后進入循環操作:依次讓棧頂元素出棧,并讓該元素入隊列(棧長度依次減1,隊列長度依次加1);接著為實現撲克牌最上面一張移到最下面,需要進行隊列頭元素移動操作,讓隊列頭元素移到隊尾(進入隊列的第一個元素不需要此操作);當全部元素都進入隊列并且完成隊列操作之后,棧為空,無棧頂元素,循環結束。發現若按此時的輸出數字序列操作,得到的是一串由大到小的數字排列,而不是由小到大,因此需要把這串隊列數字逆序輸出。根據堆棧先進后出的特點,要做到逆序輸出,只需讓隊列數字全部入堆棧,再依次輸出棧的元素即可。

分析此算法,用到的棧和隊列的主要基本操作有:初始化棧和隊列(InitStack(S); InitQueue(Q))、元素入棧操作(Push(S,i))、判空(StackEmpty(S);QueueEmpty(Q))、出棧操作(Pop(S,e))、元素入隊列操作(EnQueue(Q,e))、刪除隊列頭元素(DeQueue(Q,e))等。

3 程序設計

為增強程序的可讀性和穩定性,將程序劃分為若干個模塊。頭文件以及預定義常量放在c1.h中;順序棧的定義放在c2.h中,棧的基本操作算法放在b1.cpp中;隊列的定義放在c3.h中,隊列的基本操作算法放在b2.cpp中。核心代碼如下:

4 運行結果

運行程序,根據提示輸入撲克牌的張數,輸入13后回車,程序輸出結果,根據此輸出結果進行驗證后可以得到從小到大依次排列的13個數,說明程序正確,結果如圖1所示。

5 結語

剛開始學習數據結構的時候,雖然已經學過程序設計語言,但僅是初學,并不精通。對于抽象的數據類型、動態分配存儲空間的概念,在理解上還是很困難的,知道算法也往往編寫不出函數。只停留在看懂算法的水平上,而忽視將算法轉換為具體程序設計語言中的函數以及編寫出運行該函數的主程序。所以在上機實驗中往往編寫不出完整的程序,得出正確的結果。只有真正在解決問題,設計程序的過程中,才能提高語言編程能力,鍛煉抽象思維能力。通過撲克牌程序,對數據結構有了更深入的理解,也體會到了數據結構的靈活性和趣味性,明白了只有勤于思考,多動手實踐操作,才能有效提高編程能力,并養成良好的學習習慣,為后續課程的學習打好基礎。

[1]嚴蔚敏,吳偉民.數據結構:C語言版[M].北京:清華大學出版社,2010.

[2]范策,等.算法與數據結構:C語言版[M].北京:機械工業出版社,2004.

[3]許卓群,等.數據結構與算法[M].北京:高等教育出版社,2005.

[4]謝楚屏,等.數據結構[M].北京:人民郵電出版社,2001.

[5]傅清祥,等.算法與數據結構[M].北京:電子工業出版社,1998.

猜你喜歡
程序
給Windows添加程序快速切換欄
電腦愛好者(2020年6期)2020-05-26 09:27:33
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
基于VMM的程序行為異常檢測
偵查實驗批準程序初探
我國刑事速裁程序的構建
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
恐怖犯罪刑事訴訟程序的完善
主站蜘蛛池模板: 欧美一区二区福利视频| 丁香婷婷激情网| 无码AV日韩一二三区| 最新国产你懂的在线网址| 久久国产毛片| 婷婷色婷婷| 亚洲性日韩精品一区二区| 91精品国产麻豆国产自产在线| 40岁成熟女人牲交片免费| 谁有在线观看日韩亚洲最新视频| 国产成人综合欧美精品久久| 国产在线精品人成导航| 国产亚洲成AⅤ人片在线观看| 国产成人综合亚洲欧美在| 亚洲aⅴ天堂| 精品丝袜美腿国产一区| 伊人色天堂| 国产成人综合日韩精品无码不卡| 国产成人高精品免费视频| 日韩一级毛一欧美一国产| 久久99热66这里只有精品一| 国产女人喷水视频| 欧美综合成人| 91av成人日本不卡三区| 六月婷婷精品视频在线观看| 亚洲日本中文字幕天堂网| 99精品伊人久久久大香线蕉| 久久婷婷人人澡人人爱91| 美女一级免费毛片| 日韩精品一区二区三区大桥未久 | 久草国产在线观看| 久久国产V一级毛多内射| 99在线观看免费视频| 午夜老司机永久免费看片| 国产手机在线ΑⅤ片无码观看| 国产剧情国内精品原创| a级毛片毛片免费观看久潮| 91www在线观看| 国产无遮挡猛进猛出免费软件| 国产自无码视频在线观看| 国产噜噜噜| 91久久性奴调教国产免费| 日韩中文欧美| 亚洲精品波多野结衣| 一区二区理伦视频| 人妻无码中文字幕第一区| 国产精品性| 全部免费特黄特色大片视频| 亚洲欧洲自拍拍偷午夜色| 91无码网站| 亚洲天堂免费观看| 天天综合网亚洲网站| 国产在线98福利播放视频免费| 综合社区亚洲熟妇p| 国产精品入口麻豆| 国产va免费精品观看| 中文字幕精品一区二区三区视频 | 欧美国产在线一区| 另类重口100页在线播放| 亚洲中文字幕久久精品无码一区| 国国产a国产片免费麻豆| 中文字幕 欧美日韩| 国产视频一区二区在线观看| 日韩午夜片| 亚洲色成人www在线观看| 在线观看国产精美视频| 日韩专区欧美| 亚洲首页在线观看| 91在线一9|永久视频在线| 国产无码网站在线观看| 中文字幕va| 日韩a在线观看免费观看| 亚洲 成人国产| 国产9191精品免费观看| 国产一级精品毛片基地| 国产成人无码久久久久毛片| 国产91精品调教在线播放| 国产靠逼视频| 国产自产视频一区二区三区| 国产福利拍拍拍| 欧美日韩成人| 国产a网站|