首页 > 其他分享 >COMP2017 9017 多类型链表数据结构

COMP2017 9017 多类型链表数据结构

时间:2024-03-30 18:11:43浏览次数:23  
标签:打印 命令 COMP2017 列表 链表 嵌套 9017

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章(如
修订)。如果我提交的任何重要部分作品在未经其他来源(包括已发表的作品)适当确认的情况下被复制,互联网、现有课程、其他学生的作品或之前为其他学生提交的品奖励或评估。我意识到,我可能会被要求确定我贡献的工作的哪些部分,并被要求
过回答口头问题或承诺来展示我对相关材料的了解书面或实验室的补充工作,以得出最终评估结果做记号我承认,计算机科学学院在评估这项任务时,可能会复制它完全可以向另一位教员提供一份副本,和/或传达一份副本分配给剽窃检查服务或内部计算机程序,并且为了未来的剽窃检查。变化对此文档所做的任何更改都将在此处更新。

标签:打印,命令,COMP2017,列表,链表,嵌套,9017
From: https://www.cnblogs.com/simplesky/p/18105824

相关文章

  • 【力扣hot100】160.相交链表
    相交链表给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null。图示两个链表在节点c1开始相交:题目数据保证整个链式结构中不存在环。注意,函数返回结果后,链表必须保持其原始结构。示例1:输......
  • 天下三分明月夜,独有快慢指针法(链表面试题篇)
    本篇会加入个人的所谓‘鱼式疯言’❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • 双向链表C++
    今天写了双向链表..........写的头好晕..........看来链表还是要多加练习这个双向链表完成了增删改查,并且最后销毁链表环境VScode#include<iostream>#include<cstring>usingnamespacestd;//结点类classNode{public:stringip;//客户端ipstringn......
  • 数仓 - [03] 拉链表
      拉链表是一种特殊的数据结构,其应用场景十分广泛,主要如下:1、监控系统:拉链表可以完整地记录系统的运行状态,方便进行监控和分析。2、金融交易:在金融领域,拉链表可以记录每个交易的时间戳、交易金额、交易类型等信息,从而实现对金融风险的监控和控制。例如,可以通过拉链表查询某......
  • 20240328,位运算,可变数组,链表(我是真的没有听懂)
    位运算一,按位运算按位运算,把整数当作2进制的数字进行运算?&按位与,|按位或,~按位取反,^按位的异或,<<左移, >>右移1.1&按位与·如果(x)i==1并且(y)i==1,那么(x&y)=1否则的话(x&y)i=0按位与常用于两种应用:·让某一位或某些位为0:  x&0xFE·取一个数中的一段: x&......
  • 数据结构:实验二 单链表
    一、   实验目的掌握单链表的存储结构特点掌握单链表中的各种基本运算算法设计。二、   实验内容与要求   编写一个程序exp2-2.cpp,实现单链表的各种基本运算和下面main函数中的每一步功能。初始化单链表L;依次采用尾插法插入’a’,’b’,’c’,’d’,’e’五......
  • 以二叉链表为存储结构,在二叉树中删除以值x为根结点的子树
    【问题描述】首先输入扩展二叉树的前序序列,构建二叉树,然后输入希望删除的节点,输出删除后二叉树的前序和中序遍历序列。【输入形式】输入扩展二叉树的前序序列。【输出形式】分两行分别输出删除后二叉树的前序和中序遍历序列。【样例输入】ab##cd##e##c【样例输出】......
  • 数据结构与算法题目集(中文)6-1 单链表逆转 C语言
    6-1单链表逆转本题要求实现一个函数,将给定的单链表逆转。函数接口定义:ListReverse(ListL);其中List结构定义如下:typedefstructNode*PtrToNode;structNode{ElementTypeData;/*存储结点数据*/PtrToNodeNext;/*指向下一个结点的指针*/};t......
  • 《leetcode hot100》142. 环形链表 II
    Accode:publicclassSolution{publicListNodedetectCycle(ListNodehead){ListNodeslow=head,fast=head;while(true){if(fast==null||fast.next==null)returnnull;slow=slow.next;......
  • Leetcode 回文链表
    Day12第一题用数组存储链表的数值,在检测是否是回文数组,数组长度不可变,所以用listclassSolution{publicbooleanisPalindrome(ListNodehead){List<Integer>list=newArrayList<>();while(head!=null){list.add(head.val);......