算法2.1-算法2.12顺序表和链表模拟

任务描述

本关任务:编写一个顺序表。该顺序表的菜单如下(菜单选项用字母设定): C : 创建顺序表,格式为先输入‘C’再输入元素个数num,再输入对应的num个元素 G : 顺序表取值,格式为先输入‘G’再输入位置序号w,此菜单会输出取得的元素 L : 顺序表查找,格式为先输入‘L’再输入值e,此菜单会输出取得元素的位置 I : 顺序表插入,格式为先输入‘I’再输入插入位置序号w和插入的元素值 D : 顺序表删除,格式为先输入‘D’再输入位置序号w 你需要编写初始化、创建、取值、查找、插入、删除、输出7个函数。 其中元素ElemType e为1个平面坐标系下的点,拥有x和y两个坐标

编程要求

根据提示,在右侧编辑器补充代码。

测试说明

平台会对你编写的代码进行测试:输入的第一行为操作个数n,以下各行分别是n个操作

测试输入: 10 (解释:10次操作) C 3 1 1 2 2 3 3 (解释:创建顺序表,输入3个元素分别是 1 1, 2 2 ,3 3) G 2 (解释:取得第2个位置上的值) L 1 1 (解释:定位值为1 1的元素位置) I 3 4 4 (解释:在位置3插入元素4 4) C 4 5 5 6 6 7 7 8 8 G 5 D 7 (解释:删除第7个位置上的值) C 3 9 9 10 10 11 11 G 5 D 7

预期输出: 2 2 (解释:对应第2步的取值) 1 (解释:对应第3步的查找) 5 5 (解释:对应第6步的取值) 5 5 (解释:对应第9步的取值) 1 1 (解释:以下各行代表顺序表中所有元素的遍历输出) 2 2 4 4 3 3 5 5 6 6 9 9 10 10 11 11

#include<iostream>
using namespace std;
#define ERROR 0
#define OK 1
#define MAXSIZE 1010
typedef int Status;
typedef struct {
    int x;
    int y;
}ElemType;
typedef struct{
    ElemType *elem;
    int length;
}SqList;
Status InitList(SqList &L)
{
/********************Begin***************************/
L.elem= new ElemType[MAXSIZE];
if(!L.elem) return ERROR;
L.length = 0;
return OK;
/********************End*************************/
	
}//InitList
Status CreateList(SqList &L, int num)
{
/********************Begin***************************/
int i;
if(!L.elem) return ERROR;
for(i=0; i<num; i++)
{
    cin>>L.elem[i&#
C++中,你可以通过定义一个简单的线性数据结构来实现一个顺序表,通常称之为数组或者动态数组。这里是一个基础的顺序表(Linear List)的简单实现,包括创建列表(Create)和取值(Get)的操作: ```cpp #include <iostream> using namespace std; class ListNode { public: int data; ListNode* next; ListNode(int value) : data(value), next(nullptr) {} }; class SequenceList { private: ListNode* head; public: // 创建顺序表 void create() { cout << "请输入要添加的元素个数: "; int num; cin >> num; head = new ListNode[0]; // 初始为空列表 for (int i = 0; i < num; ++i) { int element; cout << "请输入第" << (i+1) << "个元素: "; cin >> element; head = insertElement(head, element); // 添加元素到链表头部 } } // 插入元素到链表头部 ListNode* insertElement(ListNode* list, int value) { ListNode* newNode = new ListNode(value); newNode->next = list; return newNode; } // 顺序表取值 void getValue() { if (head == nullptr) { cout << "列表为空,无法获取值。" << endl; return; } cout << "当前列表内容: "; printList(head); } // 打印整个链表 void printList(ListNode* node) { while (node != nullptr) { cout << node->data << " -> "; node = node->next; } cout << "nullptr\n"; } }; // 主函数示例 int main() { SequenceList seqList; char menuOption; do { cout << "选择操作(C - 创建,G - 取值): "; cin >> menuOption; switch (menuOption) { case 'C': seqList.create(); break; case 'G': seqList.getValue(); break; default: cout << "无效选项,请输入C或G。\n"; break; } } while (menuOption != 'Q'); // 添加退出条件,例如输入'Q'退出 return 0; } ``` 这个实现是一个非常基础的版本,仅支持在命令行界面交互。实际应用中,你可能会将其封装成类并提供更多的功能,如删除、查找等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值