当前位置:文档之家› 20104896-数据结构课程设计1

20104896-数据结构课程设计1

题号和要求
课程设计题1:顺序表操作
一、 设计目的
1.掌握线性表的顺序存储结构和操作特性。
2.实现基于顺序表的基本操作。
二、设计内容和要求
实现线性表的查找、删除、计数、输出、排序、逆置等运算,插入、删除、查找、计数、输出、排序、逆置要单独写成函数,并能在屏幕上输出操作前后的结果。
通过基本操作的组合来实现:假设利用两个线性表LA和LB分别表示两个集合A和B(即:线性表中的数据元素即为集合中的成员),分别实现集合A和B的基本运算:求交集,并集,差集,要单独写成函数,并能在屏幕上输出操作前后的结果。
源程序
const int MaxSize=100;
template
class seqlist
{public:
seqlist()
{ length=0;}
seqlist(T a[],int n);
~seqlist()
{ }
int Length ()
{return length;}
T Get(int i);
int Locate(T x);
void Insert(int i,T x);
T Delete(int i);
void PrintList();
void reverseSQ(seqlist &l);
void BubbleSort( seqlist &LA,int n);
seqlist Union(seqlist a,seqlist b);
seqlist jiaoji(seqlist a,seqlist b);
seqlist chaji(seqlist a,seqlist b);
private:
T data[MaxSize];
int length;
};
#include"SHUNXU3.h"
template
seqlist::seqlist(T a[],int n)
{
if (n>MaxSize) throw "参数非法";
for (int i=0; idata[i+1]=a[i];
length=n;
}
template
T seqlist::Get( int i )
{
if (i>=1 && i<=length) return data[i];
}
template
int seqlist::Locate(T x)
{
for (int i=0; iif (data[i+1]==x) return i+1;
return 0;
}
template
void seqlist::PrintList()
{
for (int i=0; icout<cout<}
template
void seqlist::Insert(int i, T x)
{
if (length>=MaxSize) throw "上溢";
if (i<1 || i>length+1) throw "位置";
for (int j=length; j>=i; j--)
data[j+1]=data[j];
data[i]=x;
length++;
}
template
T seqlist::Delete(int i)
{
if (length==MaxSize) throw "下溢";
if (i<1 || i>length) throw "位置";
T x=data[i];
for (int j=i; jdata[j]=data[j+1];
length--;
return x;
}
template
void seqlist:: reverseSQ(seqlist &l)
{
int low=1;
int high=l.length;
int i;
T buf;
for(i=1; i<=l.length/2; i++)
{buf=l.data[low];
l.data[low]=l.data[high];
l.data[high]=buf;
low++;
high--;
}
}
template
seqlist Union(seqlist a,seqlist b)
{

for(int i=1;i<=b.Length();i++)
{ T temp=b.Get(i);
if(!a.Locate(temp))
a.Insert(a.Length()+1,temp);
}

return a;
}

template
seqlist jiaoji(seqlist a,seqlist b)
{ seqlistc;
for(int i=1;i<=b.Length();i++)
{ T temp=b.Get(i);
if(a.Locate(temp))
c.Insert(c.Length()+1,temp);
}
return c;
}
template
seqlist chaji(seqlist a,seqlist b)
{
for(int i=1;i<=b.Length();i++)
{ T temp=b.Get(i);
int c=a.Locate(temp);
if(c)
a.Delete(c);
}
return a;
}


template
void seqlist::BubbleSort( seqlist &LA,int n)
{
int e,i,j;
e=n;
while (e!=0)
{
i=e;
e=0;
for ( j=1; jif (LA.data[j]>LA.data[j+1])
{T x;
x=LA.data[j+1];
LA.data[j+1]=LA.data[j];
LA.data[j]=x;
e=j;
}
}
}
#include
#include"SHUNXU3.cpp"
void main()
{
int a,b;
seqlistLA;
seqlistLB;
seqlistLC;
cout<<"请输入10个数据构成线性表LA:"<for(int i=1;i<=10;i++)
{cin>>a;
LA.Insert(i,a);
}
cout<<"LA的长度是:"<cout<<"LA是:"<<' ';
LA.PrintList();
cout<<"请输入10个数据构成线性表LB:"<for(i=1;i<=10;i++)
{cin>>a;
LB.Insert(i,a);
}
cout<<"LB的长度是:"<cout<<"LB是:"<<' ';
LB.PrintList();
cout<<"请输入在LA的哪个位置插入什么数据:"<cin>>a;cin>>b;
LA.Insert(a,b);
cout<<"LA的长度是:"<cout<<"LA是:"<<' ';
LA.PrintList();
cout<<"请输入在LA中删除数据的位置:"<cin>>a;
LA.Delete(a);
cout<<"LA的长度是:"<cout<<"LA是:"<<' ';
LA.PrintList();
LC=Union(LA,LB);
cout<<"LA和LB并集的长度是:"<cout<<"LA和LB的并集:"<LC.PrintList();
LC=jiaoji(LA,LB);
cout<<"LA和LB交集的长度是:"<cout<<"LA和LB的交集:"<LC.PrintList();
LC=chaji(LA,LB);
cout<<"LA-LB的长度是:"<cout<<"LA-LB是:"<LC.PrintList();
LC=chaji(LB,LA);
cout<<"LB-LA的长度是:"<cout<<"LB-LA是:"<LC.PrintList();
LA.reverseSQ(LA);
cout<<"LA逆置以后是: "<<' ';
LA.PrintList();
LA.BubbleSort(LA,10);
cout<<"排序以后的LA是:"<LA.PrintList();
LB.BubbleSort(LB,10);
cout<<"排序以后的LB是:"<LB.PrintList();
}
运行结果
请输入10个数据构成线性表LA:
9 8 7 6 5 4 3 2 1 0
LA的长度是:10
LA是: 9 8 7 6 5 4 3 2 1 0
请输入10个数据构成线性表LB:
99 9 8 88 7 6 55 4 1 11
LB的长度是:10
LB是: 99 9 8 88 7 6 55 4 1 11
请输入在LA的哪个位置插入什么数据:
8 11
LA的长度是:11
LA是: 9 8 7 6 5 4 3 11 2 1 0
请输入在LA中删除数据的位置:
10
LA的长度是:10
LA是: 9 8 7 6

5 4 3 11 2 0
LA和LB并集的长度是:14
LA和LB的并集:
9 8 7 6 5 4 3 11 2 0 99 88 55 1
LA和LB交集的长度是:6
LA和LB的交集:
9 8 7 6 4 11
LA-LB的长度是:4
LA-LB是:
5 3 2 0
LB-LA的长度是:4
LB-LA是:
99 88 55 1
LA逆置以后是: 0 2 11 3 4 5 6 7 8 9
排序以后的LA是:
0 2 3 4 5 6 7 8 9 11
排序以后的LB是:
1 4 6 7 8 9 11 55 88 99
Press any key to continue

相关主题
文本预览
相关文档 最新文档