1004_线性表操作
2016-02-28 16:45
260 查看
比赛描述
线性表是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
先看如下代码:
注意事项:
1.顺序表采用动态内存分配。
2.程序最后要释放内存。
代码分析:虽然此法能够按照要求输入输出,但实质上线性表并没有完成逆置,和元素删除。有点投机取巧
再看如下代码:
1.采用类模板,对三种不同类型进行重载
2.析构函数用delete对内存进行了释放
3.是在顺序表上实现的,单链表实现请转到http://blog.csdn.net/changshu1/article/details/47251969
知识点整理:
1.类模板的使用/article/3703094.html
2.数据结构线性表C++表示/article/3703096.html
线性表是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; int main() { int n1, n2, n3; int da, *a; char db, *b; double dc, *c; cin >> n1; a = new int[n1]; for (int i = 0; i < n1; i++) cin >> a[i]; cin >> da; cin >> n2; b = new char[n2]; for (int i = 0; i < n2; i++) cin >> b[i]; cin >> db; cin >> n3; c = new double[n3]; for (int i = 0; i < n3; i++) cin >> c[i]; cin >> dc; for (int i = n1 - 1; i >= 0; i--) cout << a[i] << " "; cout << endl; for (int i = n1 - 1; i >= 0; i--) { if (a[i] != da) cout << a[i] << " "; } cout << endl; for (int i = n2 - 1; i >= 0; i--) cout << b[i] << " "; cout << endl; for (int i = n2 - 1; i >= 0; i--) { if (b[i] != db) cout << b[i] << " "; } cout << endl; for (int i = n3 - 1; i >= 0; i--) cout << c[i] << " "; cout << endl; for (int i = n3 - 1; i >= 0; i--) { if (c[i] != dc) cout << c[i] << " "; } cout << endl; delete[]a; delete[]b; delete[]c; return 0; }运行结果:
注意事项:
1.顺序表采用动态内存分配。
2.程序最后要释放内存。
代码分析:虽然此法能够按照要求输入输出,但实质上线性表并没有完成逆置,和元素删除。有点投机取巧
再看如下代码:
#include <iostream> using namespace std; template <typename T> class MyList { public: MyList(); //默认构造函数初始化线性表 ~MyList(); void ShowList(); //输出 线性表 void ReverseList(); //调转线性表 void DelElemetAndShow(); //删除元素并且输出 private: T * list; T delet; //要删除的数据 int len; //当前长度 static const int MaxSize=1000; //最大长度 }; template <typename T> MyList<T>::MyList() { int le; cin >> le; len = le; list = new T[le]; int i = 0; while (cin>>list[i]) { i++; if (i > len - 1) break; } cin >> delet; } template <typename T> MyList<T>::~MyList() { delete[]list; } template <typename T> void MyList<T>::ShowList() { for (int i = 0; i < len; i++) cout << list[i] << " "; cout << endl; } template <typename T> void MyList<T>::ReverseList() { for (int i = 0;i<len-i-1; i++) { T temp; temp = list[i]; list[i] = list[len - i - 1]; list[len - i - 1] = temp; } } template <typename T> void MyList<T>::DelElemetAndShow() { int n=0; //用以记录ele数目 for (int i = 0; i < len; i++) { if (list[i] == delet) n++; else list[i - n] = list[i]; } len -= n; if (n == len) cout << endl; else ShowList(); } template <typename T> void ACM1004() { MyList<T> a; a.ReverseList(); a.ShowList(); a.DelElemetAndShow(); } int main() { ACM1004<int>(); ACM1004<char>(); ACM1004<double>(); return 0; }代码分析:
1.采用类模板,对三种不同类型进行重载
2.析构函数用delete对内存进行了释放
3.是在顺序表上实现的,单链表实现请转到http://blog.csdn.net/changshu1/article/details/47251969
知识点整理:
1.类模板的使用/article/3703094.html
2.数据结构线性表C++表示/article/3703096.html
相关文章推荐
- Web项目中引入maven依赖管理
- Java中比较常用的两种数据转化
- 试试54款开源服务器软件
- shell 练习002 (20160228)
- jquery(二)js与jquery互转
- Error:“应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。”
- 【Java】(三)运算符小结(比较、逻辑、三元运算符)
- MHA自动Failover过程解析(updated)
- HDU 1598 find the most comfortable road (暴力+kruskal)
- Exynos4412 裸机开发 —— IIC总线
- Spring进阶之路(3)-bean获得Spring的容器
- 适配ios9遇到的坑
- Sprint回顾会议的一种简单玩法
- 拟合(转)
- Particles.js基于Canvas画布创建粒子原子颗粒效果
- mongodb常用命令
- 对模型添加光照后,其他对象也呈现灰色
- server2008系统修改3389远程端口
- Spring进阶之路(2)-ApplicationContext容器以及事件机制
- Android 的权限设置大全