第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

下面內(nèi)容是向單鏈表的末尾添加一個元素的算法,麻煩幫忙將缺失的語句填上!

下面內(nèi)容是向單鏈表的末尾添加一個元素的算法,麻煩幫忙將缺失的語句填上!

天涯盡頭無女友 2022-01-13 20:11:34
Void InsertRear( LNode*& HL, const ElemType& item ){ LNode* newptr;newptr = new LNode;if ( newptr == NULL ){cerr << "Memory allocation failare!" << endl;exit( 1 );}newptr->data = item;_________________if ( HL == NULL ) HL = newptr;else{____________________;while ( ) p = p->next;p->next = newptr;}}
查看完整描述

2 回答

?
寶慕林4294392

TA貢獻(xiàn)2021條經(jīng)驗 獲得超8個贊

最初知道m(xù)atlab可以創(chuàng)建鏈表是通過閱讀博客:在matlab中實現(xiàn)鏈表知道的。然后通過仔細(xì)閱讀matlab幫助文檔,終于自己搞明白如何利用matlab創(chuàng)建鏈表。首先介紹matlab中的類。
1 matlab中的class
起初認(rèn)為matlab是面向過程式的語言,通過編寫一系列函數(shù)或者腳本完成任務(wù),但其實matlab中也可以通過創(chuàng)建類的方式實現(xiàn)面向?qū)ο缶幊?。其實自己早就?yīng)該發(fā)現(xiàn),在File的New菜單中第三項就是class(圖一),但是囿于固有思維,從來沒有深究過。

圖1 matlab File菜單中New選項的菜單項
1.1 類文件夾
當(dāng)要創(chuàng)建一個類時,我們應(yīng)該將類文件放在什么位置。matlab為我們提供了兩種方法:
1. 在matlab路徑下創(chuàng)建一個文件夾,然后在文件夾中創(chuàng)建一個單獨的自包含的類定義(圖二);
2. 在matlab路徑下,創(chuàng)建一個@+類名的文件夾,在其中創(chuàng)建一個類,同時我們可以將類的定義分散在多個文件中,也即該文件夾下都是該類的定義;

圖2 方式一創(chuàng)建類

圖3 方式二創(chuàng)建類
和其他高級語言(Java)類似,matlab還允許我們將這些類組織成包(packages)。包文件夾的父文件夾必須在matlab路徑下,但是包文件夾不必。包文件夾以‘+’開頭,可以包含多個類定義或者其他的包(圖四)。一個包文件夾定義了一個新的命名空間,所以我們可以重用類名。引用包中的類或者函數(shù)時需要包含包名稱,例如packagefld1.ClassNameA(),packagefld2.packageFunction()。

圖4 包文件夾的結(jié)構(gòu)
更多細(xì)節(jié)可參考matlab幫助中的Class Folders部分(在搜索框中輸入Class Folders搜索即可)。
1.2 類定義
要創(chuàng)建一個類,matlab會自動幫我們生成一個類框架,一般如下:
classdef (attribute1 = value,...) classname(< superclass_name)
properties
PropName
end
methods
methodName
end
events
EventName
end
end
類名必須要與文件名相同,第一個括號中聲明類的屬性,類似于java中的public等關(guān)鍵詞,更詳細(xì)的解釋可參考:Class Attributes。第二個括號指明類是否需要繼承父類,類似于java中的extends關(guān)鍵字或者C++中的‘:’。matlab支持多重繼承,更詳細(xì)的解釋可參考:Creating Subclasses —Syntax and Techniques。在實現(xiàn)鏈表的過程中,我們需要繼承handle類。完整的一個類模塊如下圖:

圖5 一個完整的類模塊
properties類似于java或C++中的成員變量,我們也可以給其設(shè)定各種訪問屬性,更詳細(xì)的解釋可參考:Defining Properties。
methods就是具體的函數(shù)實現(xiàn)。有很多種不同類型的函數(shù),下面簡要介紹:
普通函數(shù)(Ordinarymethods)。我們實現(xiàn)的大部分都是普通函數(shù),它負(fù)責(zé)完成該類要完成的主要任務(wù)。
構(gòu)造函數(shù)(Constructormethods)。和其他高級語言類似,也必須是類名,用來給屬性賦值。唯一不同是它必須返回它創(chuàng)建的對象。更詳細(xì)的解釋可參考:Class Constructor Methods。
析構(gòu)函數(shù)(Destructormethods)。名字必須是delete,用來釋放空間。更詳細(xì)的解釋可參考:Handle Class Delete Methods。
屬性訪問函數(shù)(Propertyaccess methods)。類似于其他高級語言中的set、get函數(shù)。更詳細(xì)的解釋可參考:Controlling PropertyAccess。
靜態(tài)函數(shù)(Staticmethods)。類似于其他高級語言中的靜態(tài)函數(shù),通過類對象進(jìn)行訪問。
轉(zhuǎn)換函數(shù)(Conversionmethods)。是對其他類構(gòu)造函數(shù)的重載,可以將自己定義類的對象轉(zhuǎn)換成重載構(gòu)造函數(shù)類的對象。更詳細(xì)的解釋可參考:Converting Objects to Another Class。
抽象函數(shù)(Abstractmethods)。無需解釋,用來在子類中繼承的函數(shù)。
對于events部分,自己缺乏了解,大家可以參考Defining Events and Listeners — Syntax and Techniques章節(jié)自己去研究。
1.3 普通函數(shù)
普通函數(shù)是我們平時寫程序用的最多的函數(shù),所以對其使用做更多的介紹。
1.3.1 基本構(gòu)成
下面是一個函數(shù)演示:
classdef ClassName
methods (AttributeName = value,...)
function x =compute(obj,inc)
x = obj.y + inc;
end
end
end
可以看出其定義和在matlab中編寫一個函數(shù)文件很類似,就是多了一個函數(shù)屬性。同時我們需要注意:非靜態(tài)函數(shù)需要顯示包含類對象,matlab暫時不支持隱式調(diào)用類對象。
1.3.2 調(diào)用規(guī)則
當(dāng)matlab調(diào)用一個普通函數(shù)時,它按如下規(guī)則決定該調(diào)用哪一個函數(shù):
1. 方法的第一個參數(shù)對應(yīng)類級別最高的情況下,調(diào)用該類的函數(shù)定義;
2. 上述類沒有定義該函數(shù),則從matlab路徑中尋找函數(shù)。
針對規(guī)則一,matlab幫助中有一個例子:For example, suppose classA defines classB as inferior and supposeboth classes define a method called combine. Calling the method with an objectof classB and classA: combine(B,A),actuallycalls the combine method of classA because A is the dominant argument.
1.3.3 調(diào)用方式
調(diào)用類的函數(shù)時,我們可以采用兩種方式:
1. 可以直接調(diào)用函數(shù),然后第一個參數(shù)是類對象,或者
2. 將第一個參數(shù)類對象提到函數(shù)前面,然后加‘.’,類似于其他高級語言中的方法調(diào)用,推薦第二種方。
當(dāng)然在極特殊的情況下,兩種方式會得到不同的結(jié)果,具體可參考:Determining Which Method Is Invoked。
1.4 靜態(tài)函數(shù)
靜態(tài)函數(shù)一般用在不需要創(chuàng)建對象就可以調(diào)用的情況下。下面是一個具體的靜態(tài)函數(shù)定義:
classdef myClass
...
methods(Static)
function p = pi(tol)
[n d] = rat(pi,tol);
p = n/d;
end
end
end
我們需要做的就是將函數(shù)的屬性聲明成Static,然后第一個參數(shù)也不必是類對象,調(diào)用的時候直接用類名調(diào)用。
2 matlab下鏈表的實現(xiàn)方法
在matlab示例代碼中,包含一個雙向鏈表的例子,就是一開始博客中提到的例子。該代碼實現(xiàn)了一個雙向鏈表值得我們仔細(xì)研究。其代碼在目錄:…\help\techdoc\matlab_oop\examples\@dlnode下。我們仿照該代碼實現(xiàn)一個單向鏈表。
首先定義一個節(jié)點類node:
classdef node <handle
properties
data
end
properties(SetAccess = public)
next
end

methods
function node = node(data)
if nargin > 0
node.data=data;
end
end
end
end

該類必須繼承于handle,然后有一個data屬性,用來保存數(shù)據(jù),和一個next屬性,用來指向下一個節(jié)點。

之后定義一個鏈表類linkedlist:
classdef linkedlist <handle

properties (GetAccess = public, SetAccess = public)
head
tail
size
end

methods
%創(chuàng)建一個空的鏈表,是構(gòu)造函數(shù)
function list = linkedlist()
list.size=0;
end

%在鏈表的尾部添加一個元素
function append(list,node)
if isempty(list.head)
list.head=node;
list.tail=node;
else
list.tail.next=node;
list.tail=node;
end
list.size=list.size+1;
end
%從鏈表的頭部刪除一個元素
function temp=deletefromhead(list)
if isempty(list.head)
%disp('The linked list is empty');
temp=0;
list.size=0;
return;
else
temp=list.head;
list.head=list.head.next;
temp.next=[];
list.size=list.size-1;
end
end
end
end
從上述定義,我們可以看出matlab下的鏈表實現(xiàn)和c或java語言下很類似。這也說明了語言本身并不是非常重要,關(guān)鍵是要理解算法。
上面是我對matlab類和鏈表實現(xiàn)的理解,很多地方是從其幫助文檔中直接翻譯過來的,很多地方翻譯的也不是很好,還請直接參看幫助文檔。

 


查看完整回答
反對 回復(fù) 2022-01-17
?
猛跑小豬

TA貢獻(xiàn)1858條經(jīng)驗 獲得超8個贊

第一空:newptr->next=NULL;
第二空:LNode* P=HL;
其實while循環(huán)條件為P->next!=NULL容易懂些。

查看完整回答
反對 回復(fù) 2022-01-17
  • 2 回答
  • 0 關(guān)注
  • 269 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號