首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

数据结构,集合,该怎么处理

2012-05-01 
数据结构,集合//头文件#includeiostream.h#includeassert.htemplateclass Tstruct SetNode{T dataS

数据结构,集合
//头文件#include<iostream.h>
#include<assert.h>
template<class T>
struct SetNode{
T data;
SetNode<T>* link;
SetNode(T x,SetNode<T>* next=NULL):data(x),link(next){};
};
template<class T>
class LinkedSet{
SetNode<T> *first,*last;//用有序链表构造集合

public:
LinkedSet(){first=last=new SetNode<T>(-1);}
~LinkedSet(){MakeEmpty();delete first;}
void MakeEmpty();
bool AddMember(const T& x);
bool DelMember(T x);
LinkedSet<T>& operator+(LinkedSet<T>& R);
  LinkedSet<T>& operator*(LinkedSet<T>& R);
LinkedSet<T>& operator-(LinkedSet<T>& R);
bool operator==(LinkedSet<T>& R);
friend ostream& operator<<(ostream& out,LinkedSet<T>& M);
};
template<class T>
bool LinkedSet<T>::AddMember(const T& x){
SetNode<T>* pre=first, * p=first->link;
while(p!=NULL && p->data<x){
pre=p;
p=p->link;
}
if(p!=NULL && p->data==x) return false;
SetNode<T> * newNode=new SetNode<T>(x);
newNode->link=p;
pre->link=newNode;
if(p==NULL) last=newNode;
return true;
}
template<class T>
bool LinkedSet<T>::DelMember(T x){
SetNode<T> *pre=first,*p=first->link;
while(p!=NULL && x>p->data){
pre=p;
p=p->link;
}
if(p!=NULL && p->data==x){
pre->link=p->link;
if(p->link==NULL) last=pre;
delete p;
return true;
}
else return false;
}
template<class T>
void LinkedSet<T>::MakeEmpty(){
SetNode<T> *del;
while(first->link!=NULL){
del=first->link;
first->link=del->link;
delete del;
}
//delete first;
}
template<class T>
LinkedSet<T>& LinkedSet<T>::operator+(LinkedSet<T>& R){//这个函数有问题,帮我看看
cout<<"sd";
SetNode<T> *pb=R.first->link,*pa=first->link;
LinkedSet<T> temp;
SetNode<T> *p,*pc=temp.first;
while(pa!=NULL && pb!=NULL){
if(pa->data < pb->data){
pc->link=new SetNode<T>(pa->data);cout<<pa->data;
pa=pa->link;
}
else if(pa->data > pb->data){
pc->link=new SetNode<T>(pb->data);
pb=pb->link;
}
else{
pc->link=new SetNode<T>(pa->data);
pa=pa->link;
pb=pb->link;
}
pc=pc->link;
}
if(pa!=NULL) p=pa;
else p=pb;
while(p!=NULL){
pc=new SetNode<T>(p->data);
p=p->link;
pc=pc->link;
}
pc->link=NULL; temp.last=pc;
cout<<temp;
return temp;这条语句有警告, returning address of local variable or temporary
}
template<class T>
ostream& operator<<(ostream& out,LinkedSet<T>& M){
SetNode<T> * p=M.first->link;
while(p!=NULL){
out<<p->data<<",";
p=p->link;
}
out<<"\n";
return out;
}
//cpp文件
#include"LinkedSet.h"
void main(){
LinkedSet<int> s1,s2;
for(int i=0;i<5;i++)
s1.AddMember(i);
for(i=2;i<7;i++)
s2.AddMember(i);
cout<<s1<<s2;
cout<<s1+s2;
}



[解决办法]
template<class T>
LinkedSet<T>& LinkedSet<T>::operator+(LinkedSet<T>& R){//这个函数有问题,帮我看看
改为
template<class T>
LinkedSet<T> LinkedSet<T>::operator+(LinkedSet<T>& R) // 返回值不要是引用


{
//...
}
即可

热点排行