顺序表新的代码
.mycode {
/*在blog中加入这地方,不过在这儿似乎不行,DW不认:)*/
font:15 Times; color:#330033;
background-color:#f7eef7;
border-width:2px;
border-style:dashed;
border-color:pink;
padding:0.5em;
FILTER: Alpha(Opacity=50);
}
.mynote {
color:#008000;
}
.include {
color:#0000FF;
}
呵呵,谢谢ilovevc提醒,这个已经把定义和实现合并到了一起,并且加上了输入和输出方法,经过调度,代码已经能够正常运行并完成任务:)
这个就是抽象定义和实现的代码,其中的PrintList和InputList用于输入和输出
/*第2章 数组 第2.2节顺序表
*第42页 抽象数据定义
*
*2005年6月21号,星期二晚
*-----------by Speed1
*/
#ifndef SEQLIST_H
#define SEQLIST_H
const DefaultSize=20;
template< class Type> class SeqList
{
public:
SeqList(int MaxSize=DefaultSize);//构造函数
~SeqList() {delete []data; }//析构函数
int Length() const {return last+1;}//计算表长度
int Find(Type& x) const;//定位函数:找x在表中的位置
int IsIn(Type& x);//判断x是否在表中
int Insert(Type& x ,int i);//插入x在表中第i个位置处
int Remove(Type& x);//删除x
int Next(Type& x);//寻找x的后继
int Prior(Type& x);//寻找x的前驱
int IsEmpty() {return last==-1;}//判断顺序表是否为空,空则返回1;否则返回0
int IsFull() {return last==MaxSize-1;}//判断顺序表满否,满则返回1;否则返回0
Type Get(int i) {return i<0||i>last?NULL:data[i];}//取第i个元素的值
void Union(SeqList<Type>& LA,SeqList<Type>& LB);//合并LA,LB,重复元素只留一下
void Intersection(SeqList<Type>& LA,SeqList<Type>& LB);//求LA,LB中的共有元素
void PrintList();//输出顺序表的数据
void InputList();//输入顺序表的数据
private:
Type* data;//存放顺序表的数组
int MaxSize;//顺序表最大可容纳项数
int last;//顺序表当前是已存表项的最后位置
};
template <class Type> SeqList<Type>::SeqList(int sz)
{
//构造函数,通过描写参数sz定义数组的长度。
if(sz>0)
{
MaxSize=sz;
last=sz-1;
data=new Type[MaxSize];
}
}
template <class Type> int SeqList<Type>::Find(Type& x) const
{
//定位,找x在表中位置 ,若查找成功,函数 返回表项的位置,否则函数返回-1
int i=0;
while(i<=last&&data[i]!=x)
i++;
if(i>last)
return -1;
else
return i;
}
template <class Type> int SeqList<Type>::IsIn(Type& x)
{
//判断x是否在表中
int i=0,found=0;
while(i<==last&&!found)
if(data[i]!=x)
i++;
else
found=1;
return found;
}
template <class Type> int SeqList<Type>::Insert(Type& x,int i)
{
//插入x在表中第i个位置处。函数返回插入是否成功的信息,若为0则插入不成功。
if(i<0||i>last+1||last==MaxSize-1)return 0;
else
{
last++;
for(int j=last;j>i;j--)
data[j]=data[j-1];
data[i]=x;
return 1;
}
}
template <class Type> int SeqList<Type>::Remove(Type& x)
{
int i=Find(x);
if(i>=0)
{
last--;
for(int j=i;j<=last;j++)
data[j]=data[j+1];
return 1;
}
return 0;
}
template <class Type> int SeqList<Type>::Next(Type& x)
{
//寻找x的后继数据
int i=Find(x);
if(i>=0&&i<last)
return i+1;
else
return -1;
}
template <class Type> int SeqList<Type>::Prior(Type& x)
{
int i=Find(x);
if(i>0&&i<=last)
return i-1;
else
return -1;
}
template <class Type> void SeqList<Type>::Union(SeqList<Type>& LA,SeqList<Type>& LB)
{
//合并顺序表LA与LB,重复元素只留一下。
int n=LA.Length();
int m=LB.Length();
for(int i=0;i<m;i++)
{
Type x=LB.Get(i);
int k=LA.Find(x);
if(k==-1)
{
LA.Insert(n+1,x);
n++;
}
}
}
template <class Type> void SeqList<Type>::Intersection(SeqList<Type> &LA,SeqList<Type>& LB)
{
//求顺序表LA与LB中的共有元素
int n=LA.Length();
int m=LB.Length();
int i=0;
while(i<n)
{
Type x=LA.Get(i);
int k=LB.Find(x);
if(-1==k)
{
LA.Remove(x);
n--;
}
else
i++;
}
}
template <class Type> void SeqList<Type>::PrintList()
{
//自己写的输出数据方法
int l=Length()-1;
for(int i=0;i<l;i++)
cout<<"\tData["<<i<<"]:"<<data[i]<<endl;
}
template <class Type> void SeqList<Type>::InputList()
{
//自己写的输入数据方法
int l=Length()-1;
for(int i=0;i<l;i++)
{
cout<<"\tPlease enter data["<<i<<"]:";
cin>>data[i];
//cout<<endl;
}
}
#endif
呵呵,这个就是主程序了,加上了新的输入、输出测试:)
/*第2章 数组 第2.2节顺序表
*第42页 测试主程序
*
*2005年6月21号,星期二晚
*-----------by Speed1
*/
#include <iostream.h>
#include "SeqList.h"
//const defaultSize=20;
void main()
{
SeqList<int> Test1(5);
SeqList<int> Test2(6);
cout<<"Test1.length:"<<Test1.Length()<<endl;
cout<<"Test2.length:"<<Test2.Length()<<endl;
cout<<"未出始化的数据:"<<endl;
cout<<"Test1:"<<endl;
Test1.PrintList();
cout<<"Test2:"<<endl;
Test2.PrintList();
cout<<"输入Test1的数据:"<<endl;
Test1.InputList();
cout<<"新的数据:"<<endl;
Test1.PrintList();
}
PS:找了个好东西。这回就不要那么费尽了,而且更加的清楚。
PPS:再次感谢ilovevc的提醒,不然不知道要走多少弯路.