还有许多要改进的地方,只是作为学习记录
两个顺序表集合的差集
测试数据:
25 33 57 60 48 9 13 0
12 50 23 60 4 34 25 13 0
#include <iostream>
#include <stdlib.h>
#define SIZE 25000
using namespace std;
typedef struct First{
int *first_num;//声明动态数组
int first_len;//记录顺序表长度
int first_size;//记录顺序表分配储存容量
}first;
typedef struct Second{
int *second_num;//声明动态数组
int second_len;//记录顺序表长度
int second_size;//记录顺序表分配储存容量
}second;
//初始化顺序表
first initFirst () {
first f1;
f1.first_num = (int*)malloc(SIZE * sizeof(int));//申请动态内存空间 ***这里出了错误有疑问,为什么first->first_num这样访问不正确
if(!f1.first_num){
cout<<"初始化失败"<<endl;
exit(0);
}//应对初始化失败
f1.first_len=0;
f1.first_size=SIZE;
return f1;
}
second initSecond () {
second s1;
s1.second_num= (int*)malloc(SIZE * sizeof(int));//申请动态内存空间
if(!s1.second_num){
cout<<"初始化失败"<<endl;
exit(0);
}//应对初始化失败
s1.second_len=0;
s1.second_size=SIZE;
return s1;
}
//顺序表的输出
void display(first f1){
for(int i=0; i <= f1.first_len; i++){
cout<<f1.first_num[i]<<" ";
}
cout<<"\n"<<endl;
}
//查找函数
int select(first f1,int second){
int pos=0;//判断是否重合
int sit=0;//记录重合的数的位置
//需为<=否则无法舍去0
for(int i=0; i<=f1.first_len; i++){
if(f1.first_num[i]==second){
pos++;
sit=i;
}
}
if(pos==0){
pos=0;
return -1;
}
else return sit;
}
//删除重合的元素
first del(first f1,int sit){
if(sit>f1.first_len||sit<0){
cout<<"位置有误"<<endl;
exit(0);
}
//删除元素
for(int i=sit; i<=f1.first_len; i++){
f1.first_num[i]=f1.first_num[i+1];//从后向前移
}
f1.first_len--;//数据少一
return f1;//返回原数列
}
//主函数加入数组
int main(){
int i=0,j=0;
int X,Y;//记录数字
int position=0;//记录重合位置
//分别分配动态内存
first f1=initFirst();
second s1=initSecond();
//分别输入两组数字 ,条件中输入直接判定为1
while(cin>>X){
if(X==0) break;
f1.first_num[i]=X;
i++;
f1.first_len++;
}
/* while(f1.first_num[i-1]!=0){
cin>>f1.first_num[i];
i++;
f1.first_len++;
}出现输入输出不匹配的情况**不能是以上情况,应学习把语句作为真值*/
while(cin>>Y){
if(Y==0) break;//跳出当前循环
s1.second_num[j]=Y;
j++;
s1.second_len++;
}
//进入查找元素,查找第一组元素中与第二组重合的元素
for(j=0; j<=s1.second_len;j++) {
position=select(f1,s1.second_num[j]);
if(position>=0)
f1=del(f1,position);
}
display(f1);
//归还内存
free(f1.first_num);
free(s1.second_num);
return 0;
}
访问内存问题已经解决,指针变量访问结构体内部成员用->,普通变量则用‘ .’
在数据的输入上出现了问题,用注释内的写法,输入与输出数据对应的下标应该是不匹配的
希望有大佬可以解释为什么输入方式错误,但数据测试是对的:(