高亮:仅作个人复盘学习过程之用,写得很烂,专业术语也不会靠瞎扯,还有很多讲给自己的废话。目前是想先打好基础再搞花里胡哨的方法。
问题描述 :
输入说明 :
输出说明 :
输入范例 :
0
13 5 27 9 32 123 76 98 54 87
5
输出范例 :
13,5,27,9,32,123,76,98,54,87
123,76,98,54,87,13,5,27,9,32
解题思路:
刚开始学数据结构所以用最原始的方法,手写一个ADT,不用vector(其实是因为不会用)。因为输入有不同类型,所以用到了模板。
算法方面,本来一开始想的是把前面(a1,a2,…,am)依次插入到表尾,但是这样会多开辟m个空间。而且实际去做的时候想用Insrt这个基本操作,但是调用起来那个下标很麻烦,还是在Exchange这个函数里一步步实现比较清楚。
此题把插入者反一下就只需要一个辅助变量了。(感谢老师上课提点,我实在是有点笨)
此题解法:
贴代码:
先是顺序表(够用就行.ver)
#include<iostream>
using namespace std;
const int MAXSIZE=100;
//异常处理 不用看 没用到
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
template<class ElemType>
class SqList
{
public://设成private还要写接口,好麻烦,只为了ac不用强求
ElemType *elem;//存储基地址
int length;//当前长度
int ListSize;//允许的最大存储容量 以sizeof(ElemType)为单位
public:
//初始化
SqList(int maxsize=MAXSIZE);
//销毁
~SqList();//这里把删表写成析构函数了,如果初始