Description

线性表是一类重要的且基础的数据结构。请定义MyList类,来模拟针对线性表的插入、删除等操作:

1. 数据成员int *elements:线性表元素。

2. 数据成员int len:线性表容量,即线性表的最大长度。

3. 数据成员int curLen:线性表的当前容量,即当前拥有的元素个数。

4. 构造函数MyList(int _len):构造最大容量为_len的线性表。

5. void append(int d):在线性表的末尾追加元素d。

6. void insert(int p, int d):在线性表的第p个位置(0<=p<curLen)插入元素d。

7. void erase(int p):删除线性表的第p个位置(0<=p<curLen)上的元素。

8. void set(int p, int d):设置线性表的第p个位置(0<=p<curLen)元素为d。

9. void show():显示当前线性表的所有元素。输出时,两两之间用一个空格隔开,首尾不能有空格。

上述“p”是指下标,从0开始计算。

Input

第1行的整数N>0,表示线性表的最大容量。

第2行的整数M>0,表示之后有M个操作。

每个操作的类型用字母A、I、E、S分别表示追加、插入、擦除和设置。

如果操作是A,则之后输入追加的元素值。

如果操作是I,则之后输入插入的位置及元素值。

如果操作是E,则之后输入擦除的位置。

如果操作是S,则之后输入设置的位置及元素值。

所有输入均在针对线性表的合法操作范围内。

Output

每次操作后,输出线性表的所有元素。

Sample Input

10
10
A 1
A 2
A 3
A 4
A 5
A 6
A 7
I 3 10
E 6
S 1 15

Sample Output

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7
1 2 3 10 4 5 6 7
1 2 3 10 4 5 7
1 15 3 10 4 5 7

HINT

不能使用vector、set等容器。

#include <iostream>
#include <list>
using namespace std;
class MyList
{
public:
    list<int> s;
    int len;
    MyList(int n){ len=n;}
    void append(int d)
    {
        s.push_back(d);
    }
    void insert(int p, int d)
    {
        list<int>::iterator it=s.begin();
        for(int i=0;i<p;i++)
            ++it;
        s.insert(it,d);
    }
    void erase(int p)
    {
        list<int>::iterator it=s.begin();
        for(int i=0;i<p;i++)
            ++it;
        s.erase(it);
    }
    void set(int p, int d)
    {
        list<int>::iterator it=s.begin();
        for(int i=0;i<p;i++)
            ++it;
        *it=d;
    }
    void show()
    {
        list<int>::iterator it=s.begin();
        for(it=s.begin();it!=s.end();it++)
        {
            if(it==s.begin())
                cout<<*it;
            else
                cout<<" "<<*it;
        }
        cout<<endl;
    }
    ~MyList()
    {
    }
};
int main()
{
    int cases, len, data, pos;
    char op;
    cin>>len;
    MyList myList(len);
    cin>>cases;
    for (int i = 0; i < cases; i++)
    {
        cin>>op;
        switch (op)
        {
        case 'A':
            cin>>data;
            myList.append(data);
            break;
        case 'I':
            cin>>pos>>data;
            myList.insert(pos, data);
            break;
        case 'E':
            cin>>pos;
            myList.erase(pos);
            break;
        case 'S':
            cin>>pos>>data;
            myList.set(pos, data);
        }
        myList.show();
    }
    return 0;
}

Problem C: 线性表的基本操作的更多相关文章

  1. 线性表的基本操作(C语言实现)

    文章目录 这里使用的工具是DEV C++ 可以借鉴一下 实现效果 顺序存储代码实现 链式存储存储实现 这里使用的工具是DEV C++ 可以借鉴一下 一.实训名称 线性表的基本操作 二.实训目的 1.掌 ...

  2. 浅谈c语言的线性表的基本操作———基于严蔚敏的数据结构(c语言版)

    主要讲的是线性表的创建,插入及删除: 0. 线性表的建立,对于这类操作主要是利用了结构体的性质,对于定义的线性表的特性主要有三点:首先 Typedef struct { ElemType   *ele ...

  3. 【线性表基础】顺序表和单链表的插入、删除等基本操作【Java版】

    本文表述了线性表及其基本操作的代码[Java实现] 参考书籍 :<数据结构 --Java语言描述>/刘小晶 ,杜选主编 线性表需要的基本功能有:动态地增长或收缩:对线性表的任何数据元素进行 ...

  4. 线性表的Java实现

    一.概念 对于常用的数据结构,可分为线性结构和非线性结构,线性结构主要是线性表,非线性结构主要是数和图.当n>0时,表可表示为:(a0,a1,a2,a3,…an) 1. 线性表的特征: 1.存在 ...

  5. 数据结构与算法(C/C++版)【绪论/线性表】

    声明:数据结构与算法系列博文参考了<天勤高分笔记>.<王道复习指导>.C语言中文网.非商业用途,仅为学习笔记总结! 第一章<绪论> 一.基本概念及入门常识  /// ...

  6. C 线性表的链式存储实现及插入、删除等操作示例

    一.链式存储的优势 线性表的存储可以通过顺序存储或链式存储实现,其中顺序存储基于数组实现(见本人上一篇博客),在进行插入删除等操作时,需对表内某一部分元素逐个移动,效率较低.而链式结构不依赖于地址连续 ...

  7. C 线性表的顺序存储实现及插入、删除等操作示例

    一.线性表的定义 线性表(Linear List)是由同一类型元素构成的有序序列的线性结构.线性表中元素的个数称为线性表的长度:线性表内没有元素(长度为0)时,称为空表:表的起始位置称为表头,表的结束 ...

  8. JAVA实现具有迭代器的线性表(顺序表)

    1,先了解下JAVA类库中的迭代器:JAVA提供了两种基本类型的迭代器,分别用两个接口来表示:Iterator<T>,ListIterator<T>.其中,Iterator&l ...

  9. 【C#数据结构系列】线性表

    一:线性表 1.1:定义:零个或多个数据元素的有限序列 1.2: 线性表元素个数n定义为线性表的长度,n = 0称为空表,i 为数据元素ai在线性表中的位序. 1.3:满足线性表的条件:(1):有序, ...

随机推荐

  1. Linux入门之常用命令(13) crontab

    为当前用户创建cron服务 1.  键入 crontab  -e 编辑crontab服务文件 例如 文件内容如下: */2 * * * * /bin/sh /home/admin/jiaoben/bu ...

  2. Android Studio 导入应用时报错 Error:java.lang.RuntimeException: Some file crunching failed, see logs for details

    在app文件夹的build.gradle里加上 android { ...... aaptOptions.cruncherEnabled = false aaptOptions.useNewCrunc ...

  3. UI自动化测试(三)对页面中定位到的元素对象做相应操作

    前两天分别讲述了UI自动化测试基础以及对页面元素该如何进行定位,这一篇自然就是对定位到的页面元素对象进行相应操作啦. 阅读目录 1.常用操作元素对象的方法 2.鼠标事件操作 3.键盘事件操作 4.We ...

  4. NOIP2014_day2:无线网络发射器选址

    #include<stdio.h>//NOIP2014 day2 :无线网络发射器选址 ,max=; ][]; void wifi(int a,int b,int c) { int i,j ...

  5. oracle排序的几种方法

    1.创建数据库表 CREATE TABLE USER_INFO(  USERID      VARCHAR2(10 BYTE)                 NOT NULL,  USERNAME  ...

  6. ASP.NET没有魔法——ASP.NET MVC & 分层

    上一篇文章简要说明了MVC所代表的含义并提供了详细的项目及其控制器.视图等内容的创建步骤,最终完成了一个简单ASP.NET MVC程序. 注:MVC与ASP.NET MVC不相等,MVC是一种开发模式 ...

  7. Akka 的Actor

    从第一篇Akka笔记的介绍中,我们是从很高的高度去观察Akka工具箱中的Actors.在这篇笔记的第二篇,我们会看一下Actors中的消息部分.而且延续上一次的例子,我们还会使用同样的学生与老师的例子 ...

  8. OpenGL ES2.0光照

    一.简单光照原理 平行光(正常光) 光照效果=   环境颜色 + 漫反射颜色 + 镜面反射颜色 点光源 光照效果=   环境颜色 + (漫反射颜色 + 镜面反射颜色)× 衰减因子 聚光灯 光照效果= ...

  9. spring boot / cloud (十九) 并发消费消息,如何保证入库的数据是最新的?

    spring boot / cloud (十九) 并发消费消息,如何保证入库的数据是最新的? 消息中间件在解决异步处理,模块间解耦和,和高流量场景的削峰,等情况下有着很广泛的应用 . 本文将跟大家一起 ...

  10. Akka(30): Http:High-Level-Api,Routing DSL

    在上篇我们介绍了Akka-http Low-Level-Api.实际上这个Api提供了Server对进来的Http-requests进行处理及反应的自定义Flow或者转换函数的接入界面.我们看看下面官 ...