zoukankan      html  css  js  c++  java
  • TZOJ 1214: 数据结构练习题――线性表操作

    描述

    请你定义一个线性表,可以对表进行“在某个位置之前插入一个元素”、“删除某个位置的元素”、“清除所有元素”、“获取某个位置的元素”等操作。键盘输入一些命令,可以执行上述操作。本题中,线性表元素为整数,线性表的第一个元素位置为1。线性表的最大长度为1000。

    输入

    各个命令以及相关数据,它们对应的格式如下:

    在某个位置之前插入操作:insert,接下来的一行是插入的组数n,下面是n行数据,每行数据有两个值,分别代表位置与插入的元素值

    清除线性表:clear

    获取某个位置的元素:getelem,接下来一行是需要获取的元素位置

    删除某个位置的元素:delete,接下来一行是被删除的元素位置

    当输入的命令为exit时,程序结束

    输出

    当输入的命令为getelem时,请输出获取的元素值,

    当输入的命令是delete时,请输出被删除的那个元素值

    注意,所有的元素均占一行

    样例输入

     insert
    2
    1 1
    2 2
    delete
    1
    clear
    insert
    2
    1 3
    2 4
    getelem
    2
    exit

    样例输出

     1
    4

    提示

    你也可以使用链表实现作,有空练练吧
    包含了线性表的所有基本操作,可以好好练习一下,路过的哪位大佬可以用链表实现一下呢?可私戳QQ:2201128470
    #include <iostream>
    #include <string>
    using namespace std;
    typedef struct node{
        int data[100001];
        int length;
    }node;
    void insert(node &a,int pos,int &e)
    {
        for(int i=a.length;i>=pos;i--)
        {
            a.data[i+1]=a.data[i];//插入元素位置之后向右移动
        }
        a.data[pos]=e;
        a.length++;//表长加1
    }
    void clear(node &a)
    {
        a.length=0;//清除线性表
    }
    void getelem(node &a,int pos,int &e)
    {
        e=a.data[pos];
     } 
    bool Delete(node &a,int pos,int &e)
     {
         if(pos<1||pos>a.length)//删除位置不合适
             return false;
         else{
             e=a.data[pos];
             for(int i=pos+1;i<=a.length;i++)
             {
                 a.data[i-1]=a.data[i];//删除元素位置之后向左移
             }
             a.length--;//表长减1
             return true;
         }
     }
    int main()
    {
        int n;
        node a;
        string s;
        clear(a);
        while(cin>>s&&s!="exit")
        {
            if(s=="insert")
            {
                cin>>n;
                for(int i=0;i<n;i++)
                {
                    int m,k;
                    cin>>m>>k;
                    insert(a,m,k);
                }
            }
            else if(s=="delete")
            {
                int j,e;
                cin>>j;
                if(Delete(a,j,e)==true)
                    cout<<e<<endl;
            }
            else if(s=="clear")
            {
                clear(a);
             } 
             else{
                 int b,e;
                 cin>>b;
                 getelem(a,b,e);
                 cout<<e<<endl;
             }
        }
    }
  • 相关阅读:
    JAVA Rest High Level Client如何取聚合后的数据
    elasticsearch中TermQuery查不到数据问题
    项目中redis改brpop阻塞模式为订阅模式的实现(二)
    项目中redis改brpop阻塞模式为订阅模式的实现(一)
    《算法笔记》5. 前缀树、桶排序、排序算法总结
    《算法笔记》4. 堆与堆排序、比较器详解
    《算法笔记》3. 归并排序、随机快排整理
    《算法笔记》2. 链表、栈、队列、递归、哈希表、顺序表
    《算法笔记》1. 复杂度、排序、二分、异或
    深入理解Java线程状态转移
  • 原文地址:https://www.cnblogs.com/andrew3/p/8687998.html
Copyright © 2011-2022 走看看