1004_线性表操作
来源:互联网 发布:ARPU数据展示模版 编辑:程序博客网 时间:2024/06/05 19:23
比赛描述
线性表是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++;elselist[i - n] = list[i];}len -= n;if (n == len)cout << endl;elseShowList();}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.类模板的使用http://blog.csdn.net/a2415180498/article/details/50785747
2.数据结构线性表C++表示http://blog.csdn.net/a2415180498/article/details/50789678
- 1004_线性表操作
- 线性表_顺序存储/基本操作
- 1004-线性表操作
- 1004线性表操作
- 1004 线性表操作
- 数据结构_线性表_链式存储_单向循环链表的基本操作
- 数据结构_线性表_链式存储_双向循环链表的基本操作
- 数据结构_线性结构_线性表
- 数据结构_线性表_链式存储_单链表 的基本操作
- 实战数据结构(7)_线性表的综合操作
- 数据结构_线性表
- 数据结构_线性表
- 数据结构_线性表
- 数据结构_线性表
- 南邮1004:线性表操作
- 数据结构_学习之_ 线性表
- 3_线性表_顺序存储
- 4_线性表_链式存储
- shell 练习002 (20160228)
- HDU 1598 find the most comfortable road (暴力+kruskal)
- hdu1022
- Java中比较常用的两种数据转化
- BS一机双屏的解决方案
- 1004_线性表操作
- vs错误提示:调运的目标异常,此实现不是 Windows 平台 FIPS 验证的加密算法的一部分
- 九度题目1431:Sort
- 51nod 1055最长等差数列 dp
- Android系统Bluetooh移植简要说明
- http中get与post的真正区别
- [leetcode] 314. Binary Tree Vertical Order Traversal 解题报告
- 微信开发配置文件详细注释版
- Linux sudo 命令详解