主题:[原创]顺序链表的程序,还有错。
有空的帮忙调试一下或者指点一二,没有空就算了,我自己慢慢来。
#include<iostream>
using namespace std;
/*****************SeqList类***************************/
class SeqList
{
private:
int *data;
int MaxSize;
int last;
public:
SeqList (int MaxSize=0);
~SeqList(){delete []data;}
int Length() const{return last+1;}
int Found(int &x)const;
int Insert(int &x,int i);
int Remove(int &x);
int Next(int &x);
int Prior(int &x);
int IsEmpty(){return (last==-1);}
int IsFull() {return (last==MaxSize-1);}
int &Get(int i){return((i<0)||(i>last))?NULL:data[i]}
//void Union(SeqList &LA,SeqList &LB);//并集
//void Intersection(SeqList &LA,SeqList &LB);//交集
};
/*******************类的成员函数函数*************************************/
SeqList::SeqList(int sz)//构造函数
{
if(sz>0)
{MaxSize=sz;
last=-1;
data=new int[MaxSize];}
}
int SeqList::Found(int &x)const //搜索函数:在表中从前向后顺序查找 x
{
int i=0;
while(i<MaxSize&&data[i]!=x)
i++;
if(x>last) return -1;
else return i;
}
int SeqList::Insert(int &x,int i)//在表中第 i 个位置插入新元素 x
{
if((i<0||i>last+1)||(last==MaxSize-1))
return 1; //插入失败
else
{
last++;
for(int j=last;j>i;j--)
data[j]=data[j-1];
data[i]=x;
return 0;//插入成功
}
}
int SeqList::Remove(int &x)//在表中删除已有元素 x
{
int i=Found(&x); //在表中搜索 x
if(i>=0)
{
last--;
for(int j=i;j<last;j++)//这里对吗?要j<=last吗?
data[j]=data[j+1];
return 0;//成功删除
}
return 1;//表中没有x
}
int SeqList::Next(int &x)
{
if(Found(&x)==last) return 1;//最后一个元素
if(Found(&x)==-1) return -1;//表中没有x
else return (Found(&x)+1);
}
int SeqList::Prior(int &x)
{
if(Found(&x)==0) return 1;//第一个元素
if(Found(&x)==-1) return -1;//表中没有x
else return (Found(&x)-1);
}
void Union(SeqList &LA,SeqList &LB)//集合的并
{
for(int i=0;i<LB.Length();i++)
{
int x=LB.Get(i);//在LB中取一元素
int k=LA.Found(x);//在LA中搜索它
if(k==-1)//若未找到插入它
LA.Insert(LA.Length(), x);
}
}
void Intersection(SeqList &LA,SeqList &LB)
{
int i=0;
while(i<LA.Length())
{
int x=LA.Get(i);//在LA中取一元素
int k=LB.Found(x);//在LB中搜索它
if(k==-1)LA.Remove(i);//未找到在LA中删除它
else i++;//未找到在LA中删除它
}
}
/**************************************************/
//
// 下面是main函数
/************************************************/
int main()
{
int i;
SeqList StudentList(20);
for( i=0;i<6;i++)
StudentList.Insert(i,i);
cout<<"链表长度"<<StudentList.Length();<<endl;
int k=StudentList.Found(5);
if(k!=-1)
cout<<"5在链表中"<<endl;
else cout<<"5不在链表中"<<endl;
StudentList.Insert(20,3);
StudentList.Remove(4);
StudentList.Next(3);
StudentList.Prior(6);
SeqList TeacherList(10);
for(i=0;i<5;i++)
TeacherList.Insert(i+1,i);
Union(StudentList,TeacherList);
for(i=0;i<StudentList.Length();i++)
cout<<StudentList.Get(i)<<" ";
cout<<endl;
Intersection(StudentList,TeacherList);
for(i=0;i<StudentList.Length();i++)
cout<<StudentList.Get(i)<<" ";
cout<<endl;
system("pause");
return 0;
}
#include<iostream>
using namespace std;
/*****************SeqList类***************************/
class SeqList
{
private:
int *data;
int MaxSize;
int last;
public:
SeqList (int MaxSize=0);
~SeqList(){delete []data;}
int Length() const{return last+1;}
int Found(int &x)const;
int Insert(int &x,int i);
int Remove(int &x);
int Next(int &x);
int Prior(int &x);
int IsEmpty(){return (last==-1);}
int IsFull() {return (last==MaxSize-1);}
int &Get(int i){return((i<0)||(i>last))?NULL:data[i]}
//void Union(SeqList &LA,SeqList &LB);//并集
//void Intersection(SeqList &LA,SeqList &LB);//交集
};
/*******************类的成员函数函数*************************************/
SeqList::SeqList(int sz)//构造函数
{
if(sz>0)
{MaxSize=sz;
last=-1;
data=new int[MaxSize];}
}
int SeqList::Found(int &x)const //搜索函数:在表中从前向后顺序查找 x
{
int i=0;
while(i<MaxSize&&data[i]!=x)
i++;
if(x>last) return -1;
else return i;
}
int SeqList::Insert(int &x,int i)//在表中第 i 个位置插入新元素 x
{
if((i<0||i>last+1)||(last==MaxSize-1))
return 1; //插入失败
else
{
last++;
for(int j=last;j>i;j--)
data[j]=data[j-1];
data[i]=x;
return 0;//插入成功
}
}
int SeqList::Remove(int &x)//在表中删除已有元素 x
{
int i=Found(&x); //在表中搜索 x
if(i>=0)
{
last--;
for(int j=i;j<last;j++)//这里对吗?要j<=last吗?
data[j]=data[j+1];
return 0;//成功删除
}
return 1;//表中没有x
}
int SeqList::Next(int &x)
{
if(Found(&x)==last) return 1;//最后一个元素
if(Found(&x)==-1) return -1;//表中没有x
else return (Found(&x)+1);
}
int SeqList::Prior(int &x)
{
if(Found(&x)==0) return 1;//第一个元素
if(Found(&x)==-1) return -1;//表中没有x
else return (Found(&x)-1);
}
void Union(SeqList &LA,SeqList &LB)//集合的并
{
for(int i=0;i<LB.Length();i++)
{
int x=LB.Get(i);//在LB中取一元素
int k=LA.Found(x);//在LA中搜索它
if(k==-1)//若未找到插入它
LA.Insert(LA.Length(), x);
}
}
void Intersection(SeqList &LA,SeqList &LB)
{
int i=0;
while(i<LA.Length())
{
int x=LA.Get(i);//在LA中取一元素
int k=LB.Found(x);//在LB中搜索它
if(k==-1)LA.Remove(i);//未找到在LA中删除它
else i++;//未找到在LA中删除它
}
}
/**************************************************/
//
// 下面是main函数
/************************************************/
int main()
{
int i;
SeqList StudentList(20);
for( i=0;i<6;i++)
StudentList.Insert(i,i);
cout<<"链表长度"<<StudentList.Length();<<endl;
int k=StudentList.Found(5);
if(k!=-1)
cout<<"5在链表中"<<endl;
else cout<<"5不在链表中"<<endl;
StudentList.Insert(20,3);
StudentList.Remove(4);
StudentList.Next(3);
StudentList.Prior(6);
SeqList TeacherList(10);
for(i=0;i<5;i++)
TeacherList.Insert(i+1,i);
Union(StudentList,TeacherList);
for(i=0;i<StudentList.Length();i++)
cout<<StudentList.Get(i)<<" ";
cout<<endl;
Intersection(StudentList,TeacherList);
for(i=0;i<StudentList.Length();i++)
cout<<StudentList.Get(i)<<" ";
cout<<endl;
system("pause");
return 0;
}