线性表操作
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;}
相关文章推荐
- sql 一些特殊技巧
- UML类图几种关系的总结
- CSS3 选择器——属性选择器
- 利用javascript调用摄像头,可以配合socket开发监控系统
- QQList
- 单链表逆序--递归算法
- 京东股权众筹平台的玩法和价值
- 清除<li>属性
- 深入学习ThreadLocal
- Tiny210开发板wm8960驱动
- java.lang.NoClassDefFoundError: org/apache/commons/pool/KeyedObjectPoolFactory
- 机器学习 学习资料整理
- Unity在移动平台中,文件操作路径详解
- 京东股权众筹平台的玩法和价值
- javafx中vbox控件最下面的控件自动填充
- 手把手教学:巧用Core Data和RubyMotion开发iOS应用
- LuaTinker的bug和缺陷
- WM_GETMINMAXINFO
- ZX
- NSCharacterSet类在分割字符串中的应用