版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}