您的位置:首页 > 其它

线性表操作

2015-07-24 16:27 281 查看

线性表操作

时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte总提交 : 3897 测试通过 : 865 比赛描述线性表是n个元素的有序集合(n≥0),n是线性表中元素的个数,称为线性表的长度。可以用一组地址连续的存储单元依次存储线性表中元素,采用这种存储方式的线性表称为顺序表。请在顺序表上实现运算,实现顺序表的逆置,删除表中所有元素值等于x的元素。输入三组数据,顺序表元素类型分别为整型、字符型和实型。每一组第一行给出元素数目n(0<n≤1000),第二行给出元素数值,第三行给出待删除的元素。输出三组数据,每一组第一行给出逆置后的顺序表元素,第二行是在此基础上删除指定元素后的顺序表元素,每一个输出元素后均有一个空格,如果元素全部被删除,那么输出一个空行。样例输入81 2 3 7 5 6 7 8 73a c mh41.2 3.4 5.6 7.81.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 1000template< 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;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: