顺序表元素删除
从有序顺序表中删除所有其值重复的元素,使表中元素不重复。
示例
输入:2 2 2 4 8 8 8 9 9
输出:2 4 8 9
思路
-
输入数组,用while循环来判断,条件是i<n+1,当输出完成后,用break结束循环即可,所以循环需要一直进行。
-
如果a[i]==a[i+1]时,i++,即下标向后走,若前后不相等,则输出前边的。当下标移到最后一个数时,由于没有元素比较,所以直接输出即可。
具体实现
#include<bits/stdc++.h>
using namespace std;
int main(){
int n=0,x,i=0,a[100];
while(cin>>x){ //输入数组中的数
a[n++]=x;
if(cin.get()=='\n') break;
}
while(i<n+1){ //一直循环
if(a[i]==a[i+1]) //当两个数相同,i++
i++;
else{
cout<<a[i]<<" "; //当两个数不同时,输出前边那个
i++;
}
if(i==n-1){ //最后一个无法比较,直接输出,退出循环
cout<<a[i];
break;
}
}
return 0;
}
合并有序表
将两个有序表合并成一个新的有序表。
示例
输入:
1 3 6 86 90
4 8 10 52 88
输出:
1 3 4 6 8 10 52 86 88 90
思路
-
分别输入两个数组中的数字。
-
while循环遍历两个数组,条件是下标不能超过数组长度。
-
二者从0开始比较,输出小的那一个;当有一个数组下标走到结尾时,即遍历完成后,若另一个数组还有元素,则全部输出,然后break结束循环。
具体实现
#include<bits/stdc++.h>
using namespace std;
int main(){
int n=0,m=0,a[100],b[100],c,d;
int i=0,j=0;
while(cin>>c){ //输入数组a
a[n++]=c;
if(cin.get()=='\n') break;
}
while(cin>>d){ //输入数组b
b[m++]=d;
if(cin.get()=='\n') break;
}
while(i<n || j<m){
if(a[i]<b[j] ){ //输出二者之中较小的
cout<<a[i]<<" ";
i++;
if(i==n) { //如果a数组遍历完了,把b数组剩下的直接输出
for(int x=j; x<m; x++)
cout<<b[x]<<" ";
break; //输出完成后跳出循环
}
}else {
cout<<b[j]<<" ";
j++;
if(j==m){ //如果b数组遍历完了,把a数组剩下的直接输出
for(int x=i; x<n; x++)
cout<<a[x]<<" ";
break; //输出完成后跳出循环
}
}
}
return 0;
}
小结
-
写代码时有很多不细心的地方,例如两个等号写成一个等号。。。要细心!!!
-
题目看着是简单,但是在写的时候还是不流畅,平时注意多回顾写过的代码!