• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    C#實(shí)現(xiàn)單鏈表結(jié)點(diǎn)插入動(dòng)畫(huà)

    2020-01-03 10:10:55蔣高飛
    現(xiàn)代信息科技 2020年16期
    關(guān)鍵詞:動(dòng)畫(huà)語(yǔ)言

    摘? 要:在Visual Studio 2012平臺(tái)中使用C#語(yǔ)言編寫(xiě)動(dòng)畫(huà),通過(guò)4個(gè)結(jié)點(diǎn)生動(dòng)演示單鏈表的創(chuàng)建以及插入、刪除結(jié)點(diǎn)的操作過(guò)程,動(dòng)畫(huà)播放時(shí)可以隨時(shí)暫停以及斷點(diǎn)續(xù)播。把算法代碼和演示區(qū)放在同一界面,動(dòng)畫(huà)演示的每一步都對(duì)應(yīng)一條語(yǔ)句,并對(duì)語(yǔ)句做了詳細(xì)注釋。結(jié)點(diǎn)的數(shù)值由學(xué)生隨機(jī)輸入,可以實(shí)現(xiàn)多種形式單鏈表的操作,提高動(dòng)畫(huà)的通用性和交互性,利于學(xué)生自主學(xué)習(xí),增強(qiáng)學(xué)習(xí)興趣,促進(jìn)其對(duì)單鏈表的掌握。

    關(guān)鍵詞:C#語(yǔ)言;單鏈表;插入結(jié)點(diǎn);動(dòng)畫(huà)

    中圖分類(lèi)號(hào):TP311? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ? 文章編號(hào):2096-4706(2020)16-0075-04

    C# Implementation of the Animation of Singly Linked List Node Inserting

    JIANG Gaofei

    (Jilin Communications Polytechnic,Changchun? 130012,China)

    Abstract:In the visual studio 2012 platform,C# language is used to write the animation,through four nodes to vividly demonstrate the creation of single chain table,the operation process of inserting and deleting nodes,and the animation can be paused and continued at breakpoint. Put the algorithm code and demonstration area in the same interface,each step of animation demonstration corresponds to a statement,and make a detailed comment on the statement. The number of nodes is input randomly by students,which can realize the operation of various forms of single chain table,improve the universality and interactivity of animation,facilitate studentsindependent learning,enhance their interest in learning,and promote their mastery of single chain table.

    Keywords:C# language;singly linked list;insert nodes;animation

    0? 引? 言

    單鏈表是我校物聯(lián)網(wǎng)專(zhuān)業(yè)“C語(yǔ)言程序設(shè)計(jì)”課程中比較重要的知識(shí)點(diǎn),為了讓學(xué)生更好地理解單鏈表的創(chuàng)建以及插入、刪除和查找結(jié)點(diǎn)等基本算法,筆者在Visual Studio 2012平臺(tái)使用C#語(yǔ)言實(shí)現(xiàn)以動(dòng)畫(huà)方式演示單鏈表算法,演示過(guò)程形象直觀,提高學(xué)生對(duì)單鏈表功能的理解。

    單鏈表是一種鏈?zhǔn)酱嫒?、從前向后單向操作的?shù)據(jù)結(jié)構(gòu)。它用一組地址任意的存儲(chǔ)單元存放線性表中的數(shù)據(jù)元素,鏈表中的數(shù)據(jù)元素以結(jié)點(diǎn)來(lái)表示。每個(gè)結(jié)點(diǎn)由數(shù)據(jù)域和指針域組成,數(shù)據(jù)域存儲(chǔ)結(jié)點(diǎn)表示數(shù)值,指針域存儲(chǔ)后續(xù)結(jié)點(diǎn)存儲(chǔ)位置的起始地址。

    單鏈表存儲(chǔ)數(shù)據(jù)的優(yōu)勢(shì)一是存儲(chǔ)數(shù)據(jù)的個(gè)數(shù)不受限制,二是插入和刪除結(jié)點(diǎn)的操作比較簡(jiǎn)單靈活,只需要修改幾個(gè)相關(guān)結(jié)點(diǎn)的指向關(guān)系。本文就以單鏈表插入結(jié)點(diǎn)操作為例,介紹、演示算法文章。

    1? 設(shè)計(jì)思想

    本動(dòng)畫(huà)演示如何按照從小到大的順序依次插入四個(gè)結(jié)點(diǎn),最終生成包含有四個(gè)結(jié)點(diǎn)的單鏈表。對(duì)于學(xué)生來(lái)說(shuō)插入結(jié)點(diǎn)的規(guī)則非常容易理解,難點(diǎn)在于掌握算法代碼和理解代碼中各個(gè)指針功能。因此作者把算法代碼和演示動(dòng)畫(huà)置于同一個(gè)界面,播放動(dòng)畫(huà)時(shí)各種指針的移動(dòng)和結(jié)點(diǎn)的移動(dòng)等每一步動(dòng)畫(huà)演示都對(duì)應(yīng)一條代碼,動(dòng)畫(huà)演示過(guò)程就是程序代碼執(zhí)行的過(guò)程。

    另外為了增加動(dòng)畫(huà)演示的互動(dòng)性,設(shè)置插入結(jié)點(diǎn)的數(shù)值可以由學(xué)生隨機(jī)輸入不同整數(shù),實(shí)現(xiàn)不同插入效果,提升了演示動(dòng)畫(huà)的通用性。

    2? 演示界面設(shè)計(jì)

    2.1? 整體界面設(shè)計(jì)

    演示界面用三個(gè)分組控件(GroupBox)分成四個(gè)區(qū)域,界面功能分區(qū)清晰明了,如圖1所示。

    (1)界面上方:按鈕操作區(qū)。

    (2)界面左側(cè):代碼區(qū)。

    (3)界面右側(cè):動(dòng)畫(huà)演示區(qū)。

    (4)界面右下方:代碼注釋區(qū)。

    2.2? 操作按鈕區(qū)

    在操作按鈕區(qū)設(shè)置三個(gè)命令按鈕控件(Button)控制動(dòng)畫(huà)的播放、暫停、斷點(diǎn)續(xù)播、結(jié)束播放。為了界面簡(jiǎn)潔減少了按鈕個(gè)數(shù),將前兩個(gè)按鈕設(shè)置成開(kāi)關(guān)按鈕。

    啟動(dòng)程序時(shí),第一個(gè)按鈕標(biāo)題為“播放動(dòng)畫(huà)”,點(diǎn)擊該按鈕播放動(dòng)畫(huà)后,標(biāo)題設(shè)置為“重新播放”;第二個(gè)按鈕初始標(biāo)題為“暫停動(dòng)畫(huà)”,當(dāng)點(diǎn)擊該按鈕暫停動(dòng)畫(huà)后,標(biāo)題設(shè)置為“繼續(xù)動(dòng)畫(huà)”;按鈕根據(jù)動(dòng)畫(huà)播放狀態(tài)分別在各自的兩個(gè)標(biāo)題間切換顯示。

    2.3? 算法代碼區(qū)

    算法代碼區(qū)顯示單鏈表從小到大插入結(jié)點(diǎn)的算法代碼。每條代碼以一個(gè)標(biāo)簽控件(Label)為載體,右側(cè)動(dòng)畫(huà)演示到某條對(duì)應(yīng)代碼時(shí),該條代碼就以明顯的紅色重點(diǎn)標(biāo)識(shí)提示學(xué)生。

    2.4? 動(dòng)畫(huà)演示區(qū)

    動(dòng)畫(huà)演示區(qū)以動(dòng)畫(huà)形式演示四個(gè)結(jié)點(diǎn)插入鏈表的過(guò)程。四個(gè)用戶(hù)自定義控件模擬結(jié)點(diǎn),四個(gè)標(biāo)簽控件(Label)模擬代碼中的指針h、s、p和q。

    2.5? 代碼注釋區(qū)

    對(duì)當(dāng)前動(dòng)畫(huà)對(duì)應(yīng)代碼做進(jìn)一步說(shuō)明,讓學(xué)生能更好地理解代碼功能。

    3? 算法設(shè)計(jì)

    3.1? 主體算法設(shè)計(jì)

    使用C#中進(jìn)程Thread與邏輯型變量flagcb和flagzt結(jié)合控制動(dòng)畫(huà)播放狀態(tài)。具體實(shí)現(xiàn)如表1所示。

    利用if和while語(yǔ)句實(shí)現(xiàn)結(jié)點(diǎn)從小到大插入單鏈表。if語(yǔ)句判斷結(jié)點(diǎn)間的各種數(shù)值比較情況,在不同分支中調(diào)用結(jié)點(diǎn)移動(dòng)函數(shù)來(lái)移動(dòng)相應(yīng)結(jié)點(diǎn),實(shí)現(xiàn)插入排序。判斷和插入結(jié)點(diǎn)流程如圖2所示。

    3.2? 演示結(jié)點(diǎn)的設(shè)計(jì)

    在整個(gè)單鏈表插入結(jié)點(diǎn)的動(dòng)畫(huà)演示中,起到關(guān)鍵作用的是結(jié)點(diǎn)的設(shè)計(jì)。

    3.2.1? 結(jié)點(diǎn)控件的設(shè)計(jì)

    每個(gè)結(jié)點(diǎn)控件由五個(gè)Label控件組成,如果重復(fù)繪制工作量比較大。因?yàn)閱捂湵碇忻總€(gè)結(jié)點(diǎn)結(jié)構(gòu)都是相同的,本程序就利用了C#的自定義用戶(hù)控件功能,把五個(gè)Label控件組合成一個(gè)結(jié)點(diǎn)控件UserControl添加到Visual Studio 2012平臺(tái)工具箱中,這個(gè)控件和Visual Studio系統(tǒng)提供的內(nèi)部控件一樣可以重復(fù)使用,提高代碼開(kāi)發(fā)效率。

    3.2.2? 結(jié)點(diǎn)移動(dòng)的設(shè)計(jì)

    單鏈表中結(jié)點(diǎn)的鏈接過(guò)程是動(dòng)態(tài)演示的,這就需要實(shí)現(xiàn)多次結(jié)點(diǎn)移動(dòng)。為了代碼簡(jiǎn)潔、避免重復(fù),筆者編寫(xiě)了結(jié)點(diǎn)控件的移動(dòng)方法。每次移動(dòng)結(jié)點(diǎn)時(shí),把移動(dòng)結(jié)點(diǎn)函數(shù)的參數(shù)分別設(shè)置為要移動(dòng)的結(jié)點(diǎn)控件名、起始位置、目標(biāo)位置即可。

    例如,左右移動(dòng)一個(gè)結(jié)點(diǎn)的子函數(shù),代碼如下所示。設(shè)置了Control類(lèi)型控件變量jd,水平移動(dòng)的起始位置xstart和目標(biāo)位置xend,垂直位置y,調(diào)用該函數(shù)時(shí)設(shè)置不同的參數(shù)值就可以實(shí)現(xiàn)不同結(jié)點(diǎn)任意位置的左右水平移動(dòng)。

    private void movejd1right(Control jd, int xstart, int xend, int y)

    {

    for (int x = xstart; x < xend; x = x+ 5)

    {

    jd.Location = new Point(x,y);

    delay(300);

    }

    }

    3.2.3? 延遲函數(shù)的設(shè)計(jì)

    為了動(dòng)畫(huà)演示速度合理,看起來(lái)更流暢,添加了延遲函數(shù),如下所示。每個(gè)結(jié)點(diǎn)移動(dòng)到一個(gè)新位置后暫停1 s。

    private void delay(int mss)

    {

    DateTime t = DateTime.Now.AddMilliseconds(mss);

    while (DateTime.Now < t)

    Application.DoEvents( );

    }

    4? 舉例說(shuō)明動(dòng)畫(huà)演示過(guò)程

    下文以結(jié)點(diǎn)數(shù)值分別為3、8、5,按照小到大插入排序?yàn)槔f(shuō)明動(dòng)畫(huà)執(zhí)行過(guò)程及效果。

    (1)點(diǎn)擊“播放動(dòng)畫(huà)”按鈕啟動(dòng)動(dòng)畫(huà)。程序播放前動(dòng)畫(huà)演示區(qū)預(yù)設(shè)置的4個(gè)結(jié)點(diǎn)和h、s、p、q四個(gè)指針不顯示。

    (2)執(zhí)行第一條語(yǔ)句,創(chuàng)建空的頭結(jié)點(diǎn)h(圖中其名稱(chēng)為結(jié)點(diǎn)1)?!安シ艅?dòng)畫(huà)”按鈕變?yōu)椤爸匦虏シ拧保皶和?dòng)畫(huà)”按鈕變?yōu)椤袄^續(xù)動(dòng)畫(huà)”,為動(dòng)畫(huà)的暫停和續(xù)播做準(zhǔn)備,如圖3所示。

    (3)繼續(xù)執(zhí)行后續(xù)代碼,因?yàn)楫?dāng)前只有頭結(jié)點(diǎn),頭結(jié)點(diǎn)h指向表尾NULL。遇到循環(huán)語(yǔ)句,執(zhí)行第一次循環(huán),給第2個(gè)結(jié)點(diǎn)(第一個(gè)數(shù)據(jù)結(jié)點(diǎn))輸入數(shù)值“3”,如圖4所示。

    (4)輸入數(shù)據(jù)“3”后,點(diǎn)擊輸入對(duì)話框的“確定”按鈕,此時(shí)數(shù)字“3”顯示在結(jié)點(diǎn)2的數(shù)據(jù)域中,如圖5所示。指針q總是指向新結(jié)點(diǎn);指針p從單鏈表頭結(jié)點(diǎn)h開(kāi)始,依次指向單鏈表中后續(xù)其他結(jié)點(diǎn),逐個(gè)和q指向的新結(jié)點(diǎn)比較,根據(jù)比較結(jié)果,新結(jié)點(diǎn)插入到相應(yīng)位置。

    (5)存儲(chǔ)數(shù)值“3”的結(jié)點(diǎn)2是除了頭結(jié)點(diǎn)外的第2個(gè)結(jié)點(diǎn),則插入到頭結(jié)點(diǎn)和表尾標(biāo)志NULL中間,如圖6所示。

    (6)第一個(gè)數(shù)值“3”(第2個(gè)結(jié)點(diǎn))插入到鏈表后,重復(fù)執(zhí)行for循環(huán),進(jìn)入循環(huán)后再次執(zhí)行輸入語(yǔ)句,給結(jié)點(diǎn)3輸入第2個(gè)數(shù)值“8”,此時(shí)結(jié)點(diǎn)3出現(xiàn)在動(dòng)畫(huà)演示區(qū)。

    (7)指針s、p分別后移一個(gè)結(jié)點(diǎn),結(jié)點(diǎn)2的數(shù)值“3”小于結(jié)點(diǎn)3的數(shù)值“8”,表尾后移給結(jié)點(diǎn)3的插入留出空位,結(jié)點(diǎn)3插入到結(jié)點(diǎn)2和表尾標(biāo)志NULL中間,如圖7所示。

    (8)輸入第4個(gè)結(jié)點(diǎn)的數(shù)值“5”。指針s和p重新指向頭結(jié)點(diǎn),再次從表頭開(kāi)始后移,依次把鏈表中的結(jié)點(diǎn)2和結(jié)點(diǎn)3的數(shù)值和新結(jié)點(diǎn)比較,直到p指向的結(jié)點(diǎn)數(shù)值大于指針q指向的新結(jié)點(diǎn)的數(shù)值,指針s和p的后移才停止。

    p指向的結(jié)點(diǎn)3數(shù)值“8”大于新結(jié)點(diǎn)4的數(shù)值“5”,結(jié)點(diǎn)3和表尾標(biāo)志NULL后移,給結(jié)點(diǎn)4空出插入的位置,結(jié)點(diǎn)4上移插入到結(jié)點(diǎn)2和結(jié)點(diǎn)3中間,如圖8所示。至此單鏈表結(jié)點(diǎn)插入操作結(jié)束。

    5? 結(jié)? 論

    在課堂上應(yīng)用單鏈表插入結(jié)點(diǎn)演示動(dòng)畫(huà),減輕了教師上課負(fù)擔(dān)。另外演示動(dòng)畫(huà)過(guò)程中添加自行輸入結(jié)點(diǎn)數(shù)據(jù)的互動(dòng)功能,提高了學(xué)生的自主學(xué)習(xí)能力,讓學(xué)生加深了對(duì)單鏈表的功能理解。但該程序也有不足之處,一是鏈表結(jié)點(diǎn)個(gè)數(shù)固定,二是不能調(diào)整播放速度,今后可以在以上方面進(jìn)行改進(jìn)。

    參考文獻(xiàn):

    [1] 張?zhí)K新,談佳豪,周仕偉,等.氣動(dòng)控制最小系統(tǒng)實(shí)訓(xùn)裝置的設(shè)計(jì) [J].現(xiàn)代信息科技,2020,4(6):31-33.

    [2] 李春葆.數(shù)據(jù)結(jié)構(gòu)教程:第5版 [M].北京:清華大學(xué)出版社,2017.

    [3] 明日科技.C#項(xiàng)目開(kāi)發(fā)實(shí)戰(zhàn)入門(mén) [M].長(zhǎng)春:吉林大學(xué)出版社,2017.

    [4] 軟件開(kāi)發(fā)技術(shù)聯(lián)盟.C#開(kāi)發(fā)實(shí)例大全(提高卷) [M].北京:清華大學(xué)出版社,2016.

    [5] 童晶.C語(yǔ)言課程設(shè)計(jì)與游戲開(kāi)發(fā)實(shí)踐教程 [M].北京:清華大學(xué)出版社,2017.

    作者簡(jiǎn)介:蔣高飛(1973—),女,漢族,吉林長(zhǎng)春人,副教授,碩士,研究方向:軟件工程。

    猜你喜歡
    動(dòng)畫(huà)語(yǔ)言
    做個(gè)動(dòng)畫(huà)給你看
    動(dòng)畫(huà)發(fā)展史
    語(yǔ)言是刀
    文苑(2020年4期)2020-05-30 12:35:30
    我的動(dòng)畫(huà)夢(mèng)
    文苑(2019年22期)2019-12-07 05:28:56
    動(dòng)畫(huà)批評(píng)融入動(dòng)畫(huà)教育的思考
    新聞傳播(2018年3期)2018-05-30 07:01:39
    讓語(yǔ)言描寫(xiě)搖曳多姿
    多向度交往對(duì)語(yǔ)言磨蝕的補(bǔ)正之道
    累積動(dòng)態(tài)分析下的同聲傳譯語(yǔ)言壓縮
    我是動(dòng)畫(huà)迷
    我有我語(yǔ)言
    文山县| 黔江区| 谷城县| 报价| 井研县| 丽水市| 鹤岗市| 吉安市| 青冈县| 江口县| 寿阳县| 会同县| 新竹市| 敦煌市| 和林格尔县| 英超| 鹤壁市| 金沙县| 西华县| 泸州市| 陈巴尔虎旗| 莲花县| 曲靖市| 宣城市| 赞皇县| 托里县| 桃源县| 鲜城| 云林县| 洞头县| 金沙县| 河南省| 柳河县| 新安县| 蓝山县| 宝兴县| 云和县| 株洲县| 当阳市| 罗城| 年辖:市辖区|