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

用面向?qū)ο罄砟钤O(shè)計線性表的構(gòu)架

2021-07-05 11:59:58韓海董蘊源
電子技術(shù)與軟件工程 2021年10期
關(guān)鍵詞:結(jié)構(gòu)

韓海 董蘊源

(江漢大學(xué)人工智能學(xué)院 湖北省武漢市 430056)

在掌握了一門計算機(jī)語言的語法規(guī)則和基本技巧之后,學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法是學(xué)生提升系統(tǒng)觀念和工程能力的關(guān)鍵。學(xué)習(xí)過程中,多數(shù)人比較注重插入、刪除、查找等功能函數(shù)的編寫,不能從總體上把握該章節(jié)中各個概念之間的關(guān)系[4,5],因此,梳理各概念之間的關(guān)系是非常必要的。

1 線性表各概念間的關(guān)系

較有影響力的教材都按照線性表的基本概念、順序表、鏈表、棧、隊列的次序安排教學(xué)內(nèi)容[1‐3],先講述線性表的定義和相關(guān)概念,說明線性表的結(jié)構(gòu)特點和應(yīng)具備的基本功能,包括創(chuàng)建、銷毀、判空、提取元素、插入元素、刪除元素、查找等等。從規(guī)范化的角度考慮,通常都為線性表定義相應(yīng)的抽象數(shù)據(jù)類型,描述數(shù)據(jù)元素之間的邏輯關(guān)系,并規(guī)定各個功能的函數(shù)名稱。這是線性表的邏輯結(jié)構(gòu)。然后,分別說明如何按兩種常用情況組織數(shù)據(jù),在每一種數(shù)據(jù)組織方式之下如何實現(xiàn)前述功能。如圖1所示,線性表、順序表、鏈表之間的關(guān)系是清晰明確的:用順序結(jié)構(gòu)組織數(shù)據(jù)而實現(xiàn)的線性表稱為順序表,用鏈?zhǔn)浇Y(jié)構(gòu)組織數(shù)據(jù)而實現(xiàn)的線性表稱為鏈表。

但是,在后續(xù)章節(jié)講述棧和隊列時就遇到困難。各種教材把棧和隊列都定義為操作受限的線性表。因此,棧和隊列應(yīng)該添加到圖1 當(dāng)中。但是,把這些概念都簡單地添加到圖1 當(dāng)中作為由線性表直接派生出的形態(tài)顯然是不合適的,棧、隊列是邏輯結(jié)構(gòu),而順序表、鏈表強(qiáng)調(diào)物理存儲,兩者并列會在概念上造成混亂。順序表、鏈表、棧和隊列都是線性表的具體表現(xiàn),它們之間的關(guān)系如何,目前,還沒有任何教材或者文獻(xiàn)全面整理了線性表各個形態(tài)之間的關(guān)系。

圖1:順序表、鏈表與線性表的關(guān)系

各類教材中講解各種形態(tài)的線性表時,除了順序表、鏈表、棧和隊列之外,還包括環(huán)形鏈表。通常都把環(huán)形鏈表劃歸鏈表的一種形態(tài),這更是讓學(xué)生難于理解:為什么要做成環(huán)形?做成環(huán)形之后還有表首、表尾嗎[6,7]?

2 面向?qū)ο罄砟钤诰€性表中的體現(xiàn)

面向?qū)ο蟪绦蛟O(shè)計以對象作為基本元素,核心理念包括抽象、封裝、繼承和多態(tài)。抽象是提取事物的屬性和行為特征,封裝是把屬性和行為組織在一起,并規(guī)定訪問權(quán)限,實施這種封裝的程序元素是類和實例。繼承是通過在已有的類的基礎(chǔ)上添加屬性、添加行為或者修改已有行為的表現(xiàn)方式而產(chǎn)生新的事物。描述原事物的類稱為基類,描述新事物的類稱為派生類。多態(tài)是指同一種行為在事物中可以有不同的表現(xiàn)形式,在同一個類當(dāng)中有不同的表現(xiàn)稱為函數(shù)重載或者方法重載,在基類與派生類之間的不同表現(xiàn)稱為函數(shù)覆蓋或者方法重寫。

圖1 是一種典型的繼承派生關(guān)系。線性表是基類,規(guī)定了這種結(jié)構(gòu)應(yīng)具備創(chuàng)建、插入、刪除等功能,順序表是以數(shù)組存儲數(shù)據(jù)元素的派生類,鏈表則是以鏈?zhǔn)浇Y(jié)構(gòu)存儲數(shù)據(jù)元素的派生類。經(jīng)典教材都用抽象數(shù)據(jù)類型規(guī)定了線性表的插入、刪除操作可以在任何合理的位置進(jìn)行,順序表、鏈表都必須為此編寫相應(yīng)的代碼。但是,在用繼承派生關(guān)系來處理棧和隊列時會遇到困難,棧和隊列是不允許在任意位置插入、刪除元素的,也就是說,棧和隊列關(guān)于插入和刪除操作與線性表有不同的規(guī)定,棧和隊列在線性表的基礎(chǔ)上減少了功能,那么,棧和隊列還是線性表嗎?目前,各類教材、文獻(xiàn)中都明確指出棧和隊列是特殊的線性表,卻沒有解釋如何在面向?qū)ο蟮木幊谭绞较缕帘蔚艟€性表規(guī)定的那些功能。

3 用面向?qū)ο罄砟顚€性表進(jìn)行頂層設(shè)計

為了解決這些問題,可以重新整理線性表的各形態(tài),明確它們之間的關(guān)系。線性結(jié)構(gòu)的最根本特征是數(shù)據(jù)對象之間有一對一的相鄰關(guān)系,具有這種關(guān)系的數(shù)據(jù)對象形成線性結(jié)構(gòu)。相鄰關(guān)系分為左相鄰關(guān)系和右相鄰關(guān)系。對于線性結(jié)構(gòu)中的任意數(shù)據(jù)對象z,最多只有唯一數(shù)據(jù)對象x 與其左相鄰,也最多只有唯一數(shù)據(jù)對象y 與其右相鄰。如果x 是z 的左相鄰數(shù)據(jù)對象(簡稱左鄰),則z 是x 的右相鄰數(shù)據(jù)對象(簡稱右鄰)。左相鄰關(guān)系和右相鄰關(guān)系都是一對一關(guān)系。

在線性結(jié)構(gòu)的基礎(chǔ)上添加一些限制可以產(chǎn)生不同的形態(tài),除了表、棧和隊列之外,環(huán)也是一種常用形態(tài)。每一種形態(tài)是一種邏輯結(jié)構(gòu),它們具有若干共同的特征。

每一種邏輯結(jié)構(gòu)又分別可以采用順序存儲方式或者鏈?zhǔn)酱鎯Ψ绞剑话惆秧樞虼鎯?shù)據(jù)對象的表稱為順序表,鏈?zhǔn)酱鎯?shù)據(jù)對象的表稱為鏈表。相應(yīng)地有順序棧、鏈?zhǔn)綏!㈨樞蜿犃泻玩準(zhǔn)疥犃械雀拍睢W鳛榫€性結(jié)構(gòu)的第四種形態(tài),可以把順序存儲數(shù)據(jù)對象的環(huán)稱為順序環(huán),鏈?zhǔn)酱鎯Φ沫h(huán)稱為鏈?zhǔn)江h(huán)。上述所有概念的關(guān)系構(gòu)成非常明晰的層次關(guān)系,如圖2所示。

圖2:線性結(jié)構(gòu)各種形態(tài)之間的關(guān)系

記數(shù)據(jù)對象的類型為ElemType,可以為線性結(jié)構(gòu)定義抽象數(shù)據(jù)類型如下:

表是規(guī)定了方向和兩個端點的線性結(jié)構(gòu)。在具備線性結(jié)構(gòu)規(guī)定的各項運算的基礎(chǔ)上,表新增的運算包括求表長、取指定位置的元素、查找是否存在滿足條件的元素、刪除元素、排序等,插入和刪除操作可以在任何合理的位置上進(jìn)行。棧、隊列和環(huán)均是在具備線性結(jié)構(gòu)規(guī)定的各項運算的基礎(chǔ)上新增若干運算。

很明顯,抽象數(shù)據(jù)類型Linear 缺少了兩種重要的運算:刪除和查找。這是基于兩方面的考慮:一是由創(chuàng)建和插入兩種運算就可以搭建出一個線性結(jié)構(gòu),這兩種運算是最根本的運算;二是線性結(jié)構(gòu)的不同形態(tài)在刪除、查找方面的要求并不一致,作為更高一層的抽象無法描述,只能在表、棧、隊列、環(huán)等形態(tài)中分別規(guī)定自己的刪除、查找運算及相應(yīng)的參數(shù)形式。

圖2 描述的各種線性結(jié)構(gòu)及相互關(guān)系與面向?qū)ο罄砟钪械睦^承是直接對應(yīng)的。針對最頂層的線性結(jié)構(gòu)可以編寫一個抽象類,這是其它所有類的基類。第二層的各個概念分別是在線性結(jié)構(gòu)之上添加了若干功能,并且只規(guī)定功能和相應(yīng)參數(shù)而不規(guī)定如何實現(xiàn),它們是線性結(jié)構(gòu)的派生類,仍然是抽象類。第三層確定了數(shù)據(jù)的存儲方式,編寫的類不再是抽象類,需要為抽象類中規(guī)定的各項功能編寫函數(shù)代碼。

例如,位于第二層的環(huán)仍然是一個抽象類,對應(yīng)的抽象數(shù)據(jù)類型可以描述為:

通常,環(huán)是有方向的,在實際設(shè)計時做出相應(yīng)的規(guī)定。比如,對于旋轉(zhuǎn)運算Rotate(n),可以規(guī)定在n>0 時把插入、刪除操作位置往右鄰方向移動,n<0 則向左鄰移動。添加新元素有多種做法,涉及把新元素添加為當(dāng)前位置的左鄰還是右鄰,以及當(dāng)前操作位置是否移動。可以在上述抽象數(shù)據(jù)類型中以說明的形式加以規(guī)定,也可以把這些細(xì)節(jié)留給派生類。

在確定了用數(shù)組或者鏈表作為數(shù)據(jù)對象的存儲方式之后,對圖2 當(dāng)中第三層的順序環(huán)或者鏈?zhǔn)江h(huán)可以編寫相應(yīng)的類,并在這種存儲方式之下實現(xiàn)創(chuàng)建、消除、插入、刪除、查找、旋轉(zhuǎn)等功能。

在線性結(jié)構(gòu)中添加環(huán)這種形態(tài)之后,就可以順理成章地解釋為什么需要有環(huán)形鏈表、雙向環(huán)形鏈表等形態(tài)。環(huán)的應(yīng)用則有著名的約瑟夫問題:n 個人排列成圓形,每個人用編號表示,第1 個人從1 開始報數(shù),報到m 的人退出,下一個人重新從1 開始報數(shù),如此反復(fù)。對于給定的正整數(shù)n 和m,求退出的次序。在編寫了圖2 第三層的順序環(huán)類或者鏈?zhǔn)江h(huán)類之后,利用環(huán)這種形態(tài)及動態(tài)聯(lián)編技術(shù),可以很簡潔地實現(xiàn)約瑟夫問題。用C++語言編寫的核心代碼如下:

除此之外,檢索技術(shù)中的線性探查法是環(huán)的一個重要應(yīng)用。用散列表組織數(shù)據(jù)時,線性探查法是最常用的沖突處理方法,該方法把數(shù)組視為一個首尾相接的環(huán),第0 號下標(biāo)與第n‐1 號下標(biāo)是相鄰元素,當(dāng)存儲新元素發(fā)現(xiàn)有沖突時,按環(huán)的形態(tài)進(jìn)行旋轉(zhuǎn)逐個查找下一位置,直至找到合適位置把新元素存入其中。

4 結(jié)語

線性結(jié)構(gòu)是最重要的邏輯結(jié)構(gòu),除了表、棧和隊列之外,線性結(jié)構(gòu)還應(yīng)包含環(huán)作為第四種形態(tài),每一種邏輯結(jié)構(gòu)又分別可以有兩種不同的數(shù)據(jù)存儲方式。按圖2 表述線性結(jié)構(gòu)的各種形態(tài),使得各種形態(tài)及具體實現(xiàn)之間的關(guān)系清晰明了,也與自上而下的設(shè)計理念相對應(yīng)。按這種方式組織相關(guān)知識的教學(xué),不僅讓學(xué)生掌握各個具體的知識點,更能讓學(xué)生站在更高的角度觀察問題,把握知識的總體構(gòu)架。

猜你喜歡
結(jié)構(gòu)
DNA結(jié)構(gòu)的發(fā)現(xiàn)
《形而上學(xué)》△卷的結(jié)構(gòu)和位置
論結(jié)構(gòu)
中華詩詞(2019年7期)2019-11-25 01:43:04
新型平衡塊結(jié)構(gòu)的應(yīng)用
模具制造(2019年3期)2019-06-06 02:10:54
循環(huán)結(jié)構(gòu)謹(jǐn)防“死循環(huán)”
論《日出》的結(jié)構(gòu)
縱向結(jié)構(gòu)
縱向結(jié)構(gòu)
我國社會結(jié)構(gòu)的重建
人間(2015年21期)2015-03-11 15:23:21
創(chuàng)新治理結(jié)構(gòu)促進(jìn)中小企業(yè)持續(xù)成長
主站蜘蛛池模板: 2020亚洲精品无码| 无码久看视频| 中文精品久久久久国产网址| 重口调教一区二区视频| 国产系列在线| 国产成人免费视频精品一区二区| 毛片免费试看| 中文字幕免费视频| 精品三级在线| 五月婷婷综合网| 国内精品久久久久鸭| 无码中文字幕乱码免费2| 精品视频第一页| 日本亚洲成高清一区二区三区| 欧美日韩一区二区在线播放| 亚洲精品天堂在线观看| 免费a级毛片视频| 一本大道香蕉高清久久| 国产福利小视频高清在线观看| 九色视频最新网址| 免费欧美一级| 国产精品视频999| 亚洲系列无码专区偷窥无码| 日本成人一区| 亚洲一区二区日韩欧美gif| 国产一区免费在线观看| 免费看av在线网站网址| 欧美激情,国产精品| 欧美在线伊人| 国产精品美人久久久久久AV| 久久久精品久久久久三级| 亚洲成人网在线播放| 日韩a级毛片| 99re在线视频观看| 亚洲精品无码专区在线观看| 一区二区在线视频免费观看| 无码福利日韩神码福利片| 亚洲国产成熟视频在线多多| 国产成人在线无码免费视频| 久久99国产视频| 黄色国产在线| 国产综合日韩另类一区二区| 日韩a在线观看免费观看| 中文国产成人精品久久| 手机成人午夜在线视频| 亚洲区第一页| 亚洲无线观看| 欧美一区二区自偷自拍视频| 在线日本国产成人免费的| 国产成人av一区二区三区| 小蝌蚪亚洲精品国产| 亚洲Av激情网五月天| 久久毛片基地| a毛片在线| 色综合热无码热国产| 无码国内精品人妻少妇蜜桃视频| 在线国产欧美| 婷婷综合色| 亚洲天堂精品在线观看| 国产成人无码Av在线播放无广告| 国产va免费精品观看| 国产一区二区视频在线| 国产永久在线视频| 亚洲综合久久成人AV| 国产女同自拍视频| 国产尤物在线播放| 亚洲va欧美ⅴa国产va影院| 日韩在线观看网站| 青草精品视频| 91在线高清视频| 91色爱欧美精品www| 欧美日在线观看| 免费观看国产小粉嫩喷水| 97在线国产视频| 91福利一区二区三区| 91精品情国产情侣高潮对白蜜| 国产91特黄特色A级毛片| 秋霞国产在线| 久久精品最新免费国产成人| 欧美一区国产| 在线观看欧美国产| 色网在线视频|