目录
题目
将存储在顺序表中的长度为n的线性表中指定的数据全部删除。
输入
第一行为顺序表的长度n; 第二行为顺序表中的数据元素; 第三行为指定要删除的元素值。
输出
如果表不空,输出删除指定值后的线性表;如果删除后表空,则输出-1。
样例输入
8 11 22 33 44 44 55 44 66 44样例输出
11 22 33 55 66
思路
正常的遍历删除就行,找到了,所有数据往前移动即可。
但是要注意的是:当全部删完是要输出-1的,并及时退出循环,否则会出现re。
//删除指定元素
void SeqlistDelete(Seqlist* &L){
int key;cin>>key;
for(int i=0;i<L->len;i++) {
while(L->data[i]==key) {
L->len--;
if(L->len==0) return;
else {
for(int j=i;j<L->len;j++) {
L->data[j]=L->data[j+1];
}
}
}
}
}
代码
数据结构
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
//定义顺序表
typedef struct {
int data[10005];
int len;
}Seqlist;
// 初始化顺序表
void SeqlistInit(Seqlist* &L) {
L=(Seqlist*)malloc(sizeof(Seqlist));
L->len=0;
}
//创建顺序表,输入数据
void SeqlistCreate(Seqlist* &L) {
int n,x;cin>>n;
while(n--) {
cin>>x;
L->data[L->len++]=x;
}
}
//删除指定元素
void SeqlistDelete(Seqlist* &L){
int y;cin>>y;
for(int i=0;i<L->len;i++) {
while(L->data[i]==y) {
L->len--;
if(L->len==0) return;
else{
for(int j=i;j<L->len;j++) {
L->data[j]=L->data[j+1];
}
}
}
}
}
//打印顺序表,输出数据
void SeqlistPrint(Seqlist* &L){
if(L->len==0) cout<<"-1";
else{
for(int i=0;i<L->len-1;i++){
cout<<L->item[i]<<" ";
}
cout<<L->item[L->len-1]<<endl;
}
}
int main() {
Seqlist *L;
SeqlistInit(L);
SeqlistCreate(L);
SeqlistDelete(L);
SeqlistPrint(L);
return 0;
}
STL
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<int>a;
int main() {
int n,x;cin>>n;
while(cin>>x,a.push_back(x),--n);
vector<int>::iterator it;
int del;cin>>del;
for(it=a.begin();it!=a.end();it++) {
while(*it==del) {
if(a.size()==1) {
cout<<-1;
a.clear();
return 0;
}
a.erase(it);
}
}
for(it=a.begin();it!=a.end();it++) cout<<*it<<" ";
return 0;
}