MNNUOJ 9009删除k个数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39993896/article/details/83181963

 Problem Description

有一顺序表L,请删除L中第i个元素起的连续k个元素。删除成功后,若顺序表非空,则输出删除后的顺序表;若顺序表为空,则不输出任何信息;若位置i有误或无法找到连续k个元素,则输出“data error”。

 Input

有多组数据,每组第一行分别表示表长n(0<n<=20)、位置i和k值(k>=0);第二行表示顺序表的各元素。

 Output

删除成功后,若顺序表非空,则输出删除后的顺序表,每两个元素之间用一个空格分隔;若顺序表为空,则不输出任何信息;若位置i有误或无法找到连续k个元素,则输出“data error”。

 Sample Input

5 2 3
1 2 3 4 5

 Sample Output

1 5

 Hints

 
不管数据是否有效,都要完整的读入表的数据。

方法一:顺序表

#include<iostream>
#include<stdio.h>
const int MAX=21;
using namespace std;
class SeqList {
public :
    int length;
    int array[MAX];
    bool flag;
public:
    SeqList() {
        length=0;
    }
    SeqList(int* a,int n) {
        for(int i=0; i<n; i++) {
            array[i]=a[i];

        }
        length=n;

    }
    void Print() {
        for(int i=0; i<length; i++) {
            if(i)
                cout<<" ";
            cout<<array[i];
        }
        cout<<endl;
    }

    void Delete(int index,int k) {
        for(int loop=0; loop<k; loop++) {
            for(int i=index-1; i<length-1; i++) {
                array[i]=array[i+1];
            }
            length--;
        }
    }

};
int main() {
   
    int n,index,k;
    while(cin>>n>>index>>k) {
        int* a=new int[n];
        for(int i=0; i<n; i++)
            cin>>a[i];
        SeqList list(a,n);
        
        if(list.length==0)
         continue;
        else if(index<=0||index>n||(index+k-1)>n) {
            cout<<"data error"<<endl;

        }
        else{
list.Delete(index,k);
        list.Print();}
        delete a;
    }
    return 0;
}

方法二:单链表

#include<iostream>
#include<stdio.h>
const int MAX=21;
using namespace std;
class List {
public:
    struct node {
        int data;
        node* next;
    };
    node* head;
public:
    List() {
        head=new node;
        head->next=NULL;
    }
    void Creat(int n) {

        node* r=head;
        for(int i=0; i<n; i++) {
            int num;
            cin>>num;
            node* s=new node;
            s->data=num;
            r->next=s;
            r=s;
        }
        r->next=NULL;
    }
    void Print() {
        node* p=head->next;
        if(p) {
            while(p->next) {
                cout<<p->data<<" ";
                p=p->next;
            }
            cout<<p->data<<endl;

        }
    }
    void Delete(int index,int k){
    int count=0;
    node* p=head;
    while(p->next&&++count<index)
    {
        p=p->next;

    }
    while(p->next&&count++<k+index){
        node* s=p->next;
        p->next=s->next;
        delete s;

    }
    }
};
int main() {
  
    int n,index,k;
    while(cin>>n>>index>>k){
        List list;
        list.Creat(n);
        if(index<=0||index>n||(k+index-1)>n){
            cout<<"data error"<<endl;
        }
        else {
               list.Delete(index,k);
        list.Print();
        }


}
return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_39993896/article/details/83181963