线性表操作
时间限制(普通/Java) :
1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 3897 测试通过 : 865
总提交 : 3897 测试通过 : 865
比赛描述
线性表是n个元素的有序集合(n≥0),n是线性表中元素的个数,称为线性表的长度。可以用一组地址连续的存储单元依次存储线性表中元素,采用这种存储方式的线性表称为顺序表。
请在顺序表上实现运算,实现顺序表的逆置,删除表中所有元素值等于x的元素。
输入
三组数据,顺序表元素类型分别为整型、字符型和实型。
每一组第一行给出元素数目n(0<n≤1000),第二行给出元素数值,第三行给出待删除的元素。
输出
三组数据,每一组第一行给出逆置后的顺序表元素,第二行是在此基础上删除指定元素后的顺序表元素,每一个输出元素后均有一个空格,如果元素全部被删除,那么输出一个空行。
样例输入
8
1 2 3 7 5 6 7 8
7
3
a c m
h
4
1.2 3.4 5.6 7.8
1.2
样例输出
8 7 6 5 7 3 2 1
8 6 5 3 2 1
m c a
m c a
7.8 5.6 3.4 1.2
7.8 5.6 3.4
#include<iostream>
using namespace std;
#define OK 1
#define ERROR -1
#define TURE 1
#define FALSE 0
#define MAXLENGTH 1000
template< typename T > struct seq
{
T data[MAXLENGTH];
int length;
typedef T seqval;
};
template< typename T> int listreverse(seq<T> * list)
{
int len=list->length;
if(len<=0||len>MAXLENGTH)
return FALSE;
int i;
T tem;
for(i=0;i<len/2;i++)//线性表reverse,这里要注意i的范围
{
tem=list->data[i];
list->data[i]=list->data[len-1-i];
list->data[len-1-i]=tem;
}
return OK;
}
template<typename T> int listdisplay(seq<T> * list)
{
int len=list->length;
if(len<0||len>MAXLENGTH)
return FALSE;
else if(len==0)
{
cout<<endl;
}
else
{
int i;
for(i=0;i<len;i++)
cout<<list->data[i]<<" ";
cout<<endl;
}
return OK;
}
template <typename T> int listdeleteval(seq<T> *list,T x)
{
int si,di,n;
si = 0;
di = 0;
n = list->length;
if(n<=0||n>MAXLENGTH)
return FALSE;
while(si<n)
{
while(si<n && list->data[si]==x)
{
si++;
list->length--;
}
while(si<n && list->data[si]!=x)
{
if (si == di)
{
si++;
di++;
}
else
list->data[di++] = list->data[si++];
}
}
return OK;
}
template<typename T> int listinit(seq<T>* list,int n)
{
list->length=n;
for(int i=0;i<n;i++)
{
cin>>list->data[i];
}
return OK;
}
int main()
{
int n;
seq<int> list1;int intval;
cin>>n;
listinit(&list1,n);
cin>>intval;
seq<char> list2;char charval;
cin>>n;
listinit(&list2,n);
cin>>charval;
cin>>n;
seq<double> list3;double doubleval;
listinit(&list3,n);
cin>>doubleval;
listreverse(&list1);
listdisplay(&list1);
listdeleteval(&list1,intval);
listdisplay(&list1);
listreverse(&list2);
listdisplay(&list2);
listdeleteval(&list2,charval);
listdisplay(&list2);
listreverse(&list3);
listdisplay(&list3);
listdeleteval(&list3,doubleval);
listdisplay(&list3);
return 0;
}