COMP2017 9017 多型別連結串列資料結構

浅笑心柔2發表於2024-03-30

COMP2017 9017課業2到期時間:2024年3月28日23:59這項任務相當於你最終評估的10%
任務描述
您的任務是建立一個多型別連結串列資料結構和與之互動的程式任務分為三個任務,必須按順序完成。第一部分是連結串列的基本命令語法、建立、刪除、檢視等。第二部分是透過插入和刪除元素來修改現有的列表。第三部分是允許列表以巢狀模式相互引用。還建議仔細閱讀本規範。您應該確保建立在開始編碼之前覆蓋一系列可能輸入的測試用例。
1確保您識別並測試邊緣情況。實施詳細資訊所有命令都透過標準輸入讀取,所有輸出都透過標準輸出給出。第1部分:基本命令對於第1部分,您的連結列表必須支援以下型別的元素:int浮子炭字串您的程式應該接受來自stdin的命令,這些命令將建立和管理這些多型別
連結串列。基本命令包括:1即使你用鉛筆和紙做,也要透過一些例子來確保你理解。COMP2017 9017
NEW<元素數量>-建立新列表檢視<列表索引>-按索引檢視特定列表PE<list index>-透過索引檢視特定列表,列印出每個元素的型別。
檢視全部-按建立順序列印列表數量和每個列表
EMOVE<list index>-刪除列表每個列表的索引應比上次建立的列表的索引高1,第一個列表的索引從0開始
列表,無論刪除了多少個列表。基本示例在以下示例中,“>”表示以下行作為輸入。您的程式不得將其列印到stdout或從stdin讀取它。它僅作為指示符包含在格式中,以區分程式輸出的輸入。命令關鍵字僅由一(1)個空格字元分隔,並且不應有前導字元和尾隨的白色空間2。請確保準確地複製這些示例的格式,按字元
性格NEW命令此命令接受一個數字作為列表初始大小的輸入。然後讀取初始值用於初始化列表的每個元素。0是有效的大小,負數不是。列表已標記當它們開始存在時,從0開始,即使刪除了列表,標籤也始終遞增。想象一下,在下面的部分中,已經建立了4個列表。只有在所有輸入行都已解析且沒有錯誤後,列表才會被視為“已建立”
發生VIEW命令此命令在給定索引處列印列表的內容。.插入字串時除外。請參閱以下示例系統程式設計第2頁,共15頁
OMP2017 9017>檢視4
你好->1->2->3.14->a
TYPE命令
此命令列印出給定列表中每個元素的型別。

型別4
string->int->int->float->char
VIEW ALL命令
此命令按索引遞增順序列印出當前列表集。
檢視全部
列表數量:3
列出0
列表3
列表4
REMOVE命令此命令刪除列表,並按索引遞增順序再次列印出當前列表集。
刪除3
列表3已刪除。
列表數量:2
列出0
列表4
無效的命令
如果一行嚴格以命令關鍵字開頭,則可以從該行識別命令,
如果無效則無效。
如果某個命令在某種程度上無效,請列印invalid command(無效命令):<使用的命令>。例如,當沒有列表4時:
刪除4
無效命令:REMOVE
系統程式設計第3頁,共15頁
COMP2017 9017
如果無法識別命令,請使用INPUT。例如
胡言亂語
無效命令:輸入
這取決於你去發現和準備邊緣案例。
型別規則和例外
在某些情況下,給定輸入的型別可能存在一些歧義
檢查如下:
整數
浮子

字串
型別要求如下:
int可以是負數、正數或零(測試也不會超過最大值和最小值int型別的值)。浮點值是相同的,只是它總是有一個小數點。3浮點值也應列印到小數點後2位,儘管它們可以讀取到任何精度。字元是任何可列印的4ascii中的字元,只要它是單數。字串涵蓋所有其他情況。
列表建立中的空行應視為字串。字串可以以前導和尾隨空白字元代 寫COMP2017 9017 多型別連結串列資料結構開頭包含一個int或float的行可以有前導空格和尾隨空格。這些將是解釋為數字。(請注意,這是scanf的預設行為)。所有輸入的最大匯流排路長度為128位元組。列表4:1.00->->長棍麵包->5
3也應接受的科學記數法除外,即2e-4=0.0002。請注意預設情況下,scanf接受這種型別的輸入。
4sprint()返回true系統程式設計第4頁,共15頁COMP2017 9017請注意被解釋為空字串的空行,以及“長棍麵包”中的額外空間。
不會有不符合此描述的測試用例。注意:卷括號{}在第3部分中使用,如果它們以任何形式出現,則被視為無效輸入而不是在那裡指定的。5.
新3
1.0
{}
EOF後,程式應釋放所有已使用的動態記憶體,然後退出。第2部分:動態列表在本部分中,您將實現兩個額外的命令:INSERT和DELETE。
INSERT命令
此命令採用INSERT<list id><index><value>形式的輸入,並插入給定列表的給定索引處的值。然後,它應該以相同的格式列印出新列表如VIEW,但前面有字串“List:”。例如:>檢視1
a->b->c->d
插入10個長棍麵包清單1:長棍麵包->a->b->c->d負指數應從列表末尾插入。範圍之外的索引無效:
檢視1
a->b->c->d
插入1-1長棍麵包
列表1:a->b->c->d->長棍麵包
5為了完成第1部分和第2部分,只要檢測到花括號,就足以引發錯誤。部分
3引入了一個非錯誤的特殊使用。
系統程式設計第5頁,共15頁
COMP2017 9017
插入1 97羊角麵包
無效命令:插入
DELETE命令
此命令採用DELETE<list id><index>形式的輸入,並刪除給定的索引。然後,它應該以與INSERT相同的格式列印出新列表。相同的指數條件適用。例如
檢視1a->b->c->d
刪除1 0
列表1:b->c->d
刪除1-1
列表1:b->c
刪除1 4
無效命令:DELETE
第3部分:巢狀列表在本節中,您將修改以前的程式碼以接受新型別:其他列表。這是為了最大深度為一。這意味著每個列表要麼是一個簡單的列表(只包含常規型別),要巢狀列表(包含常規型別和簡單列表)。巢狀列表不能包含其他巢狀列表。巢狀列表僅包含對簡單列表的引用。因此,對簡單列表的更改也應該
反映在巢狀列表中。要在巢狀列表中插入一個簡單列表,應使用大括號進行指定。巢狀列表時列印時,應將其標記為“巢狀”,如下所示:
檢視1
a->b->c->d
新3
1.最後的巢狀2:第一個->{列表1}->最後一個
檢視全部列表數量:2列表1巢狀2
引用不存在的列表的任何命令,或將導致任何列表的深度大於1的命令應發出無效命令:系統程式設計第6頁,共15頁
COMP2017 9017>檢視0
a->b->c->d>新2
第一最後的列表1:第一個->最後一個
插入1 1{0}巢狀1:第一個->{列表0}->最後一個
新1
1.無效命令:新建如果使用DELETE從巢狀列表中刪除所有引用,則該列表將變為簡單列表。型別命令應將引用列印為對其他列表的任何引用的型別。
檢視0
a->b->c->d
檢視1
第一個->{列表0}->最後一個
型別1
字串->引用->字串
當一個簡單列表被任何其他列表引用時,刪除該列表應給出
無效命令:REMOVE。
VIEW-NESTED命令
此命令可以列印任何列表,但當它列印巢狀列表時,它也將列印包含的子列表在花括號中。就像這樣:
檢視1
a->b->c->d
檢視2第一個->{列表1}->最後一個
檢視測試1
a->b->c->d
檢視測試2
第一個->{a->b->c->d}->最後一個限制
要成功完成此任務,您必須:使用動態記憶體。
系統程式設計第7頁,共15頁COMP2017 901使用連結串列結構,6
它們必須是您自己的實現。釋放所有使用的動態記憶體除了glibc中的庫之外,不要使用任何外部庫。其他受限制的功能可能會在晚些時候出現。
任何違反這些限制的提交都將被扣5分。您提交的所有文字可能會被審閱者(標記人)閱讀,包括程式碼註釋,git提交訊息、README檔案等都應該用英語編寫。任何可讀文字不是用英語寫的,每行扣1分。正在處理您的我們鼓勵您在完成課業的過程中向Ed提交課業。
提交,您將獲得對所提供的樣本測試用例的一些進度反饋。如果您對C函式有任何疑問,請參閱相應的手冊頁。你可以而且應該在Ed.上詢問有關這項課業的問題。與任何課業一樣,確保你的工作這
巢狀
{0}
4.0小時巢狀1:此->巢狀->{列表0}->4.0小時
檢視測試1
this->巢狀->{this->是->simple}->4.0小時
新1另外清單2:其他
插入0 2{2}無效命令:插入
刪除0
系統程式設計第12頁,共15頁COMP2017 9017無效命令:REMOVE
刪除1 2列表1:此->巢狀->4.0小時
插入0 2{1}巢狀0:this->is->{List 1}->simple
插入0 0{1}巢狀0:{List 1}->this->是->{List 1}->simple
刪除0 0巢狀0:this->is->{List 1}->simple
檢視測試0
this->是->{this->巢狀->4.0 h}->simple注意“4.0 h”是一個字串,而不是浮點值。系統程式設計第13頁,共15頁
COMP2017 9017
學術宣言透過提交此課業,您宣告如下:我宣告我已閱讀並理解悉尼大學學生剽竊:課程政策和程式,除非特別承認,本任務/專案中包含的工作是我自己的工作,並且
未從其他來源複製或之前提交用於獎勵或評估。我理解未能遵守學生剽竊:課程政策和程式根據1999年悉尼大學章程第8章(如
修訂)。如果我提交的任何重要部分作品在未經其他來源(包括已發表的作品)適當確認的情況下被複制,網際網路、現有課程、其他學生的作品或之前為其他學生提交的品獎勵或評估。我意識到,我可能會被要求確定我貢獻的工作的哪些部分,並被要求
過回答口頭問題或承諾來展示我對相關材料的瞭解書面或實驗室的補充工作,以得出最終評估結果做記號我承認,電腦科學學院在評估這項任務時,可能會複製它完全可以向另一位教員提供一份副本,和/或傳達一份副本分配給剽竊檢查服務或內部計算機程式,並且為了未來的剽竊檢查。變化對此文件所做的任何更改都將在此處更新。

相關文章