本文主要是介绍MNNUOJ 9009删除k个数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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;
}
这篇关于MNNUOJ 9009删除k个数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!