顺序表的应用
一)目的和要求:
1. 熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。
2. 熟练掌握顺序表的插入与删除操作。
二)试验内容:
1.设计并实现顺序表类。
2. 设计算法,实现顺序存储结构上元素的插入与删除。
·从键盘输入10个数据元素,利用顺序表的基本操作,建立该顺序表。
·从键盘输入一个元素插入第i个位置。
·删除刚才插入的元素。
用c++描述,高手能帮忙编一下吗
[此贴子已经被作者于2006-4-2 14:27:21编辑过]
把顺序表的相关的文件给你 自己调用想关的函数就可以了 很简单的。。
//SeqList.h
const int MaxSize=100; //100只是示例性的数据,可以根据实际问题具体定义
template <class T> //定义模板类SeqList
class SeqList
{
public:
SeqList( ); //无参构造函数
SeqList(T a[], int n); //有参构造函数
~SeqList(); //析构函数为空
int Length(); //求线性表的长度
T Get(int i); //按位查找,取线性表的第i个元素
int Locate(T x); //按值查找,求线性表中值为x的元素序号
void Insert(int i, T x); //在线性表中第i个位置插入值为x的元素
T Delete(int i); //删除线性表的第i个元素
void PrintList(); //遍历线性表,按序号依次输出各元素
private:
T data[MaxSize]; //存放数据元素的数组
int length; //线性表的长度
};
/*
*前置条件:顺序表不存在
*输 入:无
*功 能:构建一个顺序表
*输 出:无
*后置条件:构建一个顺序表
*/
template <class T>
SeqList<T>:: SeqList( )
{
length=0;
}
/*
*前置条件:顺序表不存在
*输 入:顺序表信息的数组形式a[],顺序表长度n
*功 能:将数组a[]中元素建为长度为n的顺序表
*输 出:无
*后置条件:构建一个顺序表
*/
template <class T>
SeqList<T>:: SeqList(T a[], int n)
{
if (n>MaxSize) throw "参数非法";
for (int i=0; i<n; i++)
data[i]=a[i];
length=n;
}
/*
*前置条件:无
*输 入:无
*功 能:无
*输 出:无
*后置条件:无
*/
template <class T>
SeqList<T>:: ~SeqList( )
{
}
/*
*前置条件:顺序表存在
*输 入:插入元素x,插入位置i
*功 能:将元素x插入到顺序表中位置i处
*输 出:无
*后置条件:顺序表插入新元素
*/
template <class T>
void SeqList<T>::Insert(int i, T x)
{
int j;
if (length>=MaxSize) throw "上溢";
if (i<1 || i>length+1) throw "位置";
for (j=length; j>=i; j--)
data[j]=data[j-1]; //注意第j个元素存在数组下标为j-1处
data[i-1]=x;
length++;
}
/*
*前置条件:顺序表存在
*输 入:要删除元素位置i
*功 能:删除顺序表中位置为i的元素
*输 出:无
*后置条件:顺序表删除元素
*/
template <class T>
T SeqList<T>::Delete(int i)
{
int x,j;
if (length==0) throw "下溢";
if (i<1 || i>length) throw "位置";
x=data[i-1];
for (j=i; j<length; j++)
data[j-1]=data[j]; //注意此处j已经是元素所在的数组下标
length--;
return x;
}
/*
*前置条件:顺序表存在
*输 入:无
*功 能:输出顺序表长度
*输 出:顺序表长度
*后置条件:顺序表不变
*/
template <class T>
int SeqList<T>::Length()
{
return length;
}
/*
*前置条件:顺序表存在
*输 入:查询元素位置i
*功 能:按位查找位置为i的元素并输出值
*输 出:查询元素的值
*后置条件:顺序表不变
*/
template <class T>
T SeqList<T>::Get(int i)
{
if (i<1 && i>length) throw "查找位置非法";
else return data[i-1];
}
/*
*前置条件:顺序表存在
*输 入:查询元素值x
*功 能:按值查找值的元素并输出位置
*输 出:查询元素的位置
*后置条件:顺序表不变
*/
template <class T>
int SeqList<T>::Locate(T x)
{
for (int i=0; i<length; i++)
if (data[i]==x)
return i+1 ; //下标为i的元素等于x,返回其序号i+1
return 0; //退出循环,说明查找失败
}
/*
*前置条件:顺序表存在
*输 入:无
*功 能:顺序表遍历
*输 出:输出所有元素
*后置条件:顺序表不变
*/
template <class T>
void SeqList<T>::PrintList()
{
for(int i=0;i<length;i++)
cout<<data[i]<<endl;
}
//主函数 可以这样写 把这个和上面的防一起就可以用了
#include <iostream.h> //引用输入输出流库函数的头文件
#include "SeqList.h" //引用顺序表类SeqList
void main( )
{
int b[10]={0,1,2,3,4,5,6,7,8,9};
int p1,p2;
SeqList<int> a(b,10);
a.PrintList();
cout<<"输入要插入的元素"<<endl;
cin>>p1;
cout<<"要插入的位置"<<endl;
cin>>p2;
a.Insert(p2, p1);
cout<<"已经插入"<<endl;
a.PrintList();
a.Delete(p2);
cout<<"已经删除"<<endl;
a.PrintList();
}