C++顺序表(殷人昆版)
2015-12-30 15:51
471 查看
此代码将顺序表的基本创建函数写出,能够完成基本的操作。
#include <iostream> #include <cstdio> #include <stdlib.h> #include <string.h> #include <assert.h> using namespace std; const int defaultSize = 100; template<class T> class SeqList { public: SeqList(int sz = defaultSize) { if(sz > 0) { maxSize = sz; size = -1; data = new T[maxSize]; assert(data); } } SeqList(SeqList<T> &L) { maxSize = L.maxSize; size = L.Length() - 1; T value; data = new T[maxSize]; assert(data); for (int i = 1; i <= last + 1; ++i) { L.getData(i, value); data[i - 1] = value; } } ~SeqList() { delete[] data; } int Size() const//计算表最大可容纳表项个数 { return maxSize; } int Length() const//计算表长度 { return size+1; } int Serach(T& x) const//搜索x在表中的位置,函数返回表项符号 { for(int i = 0; i <= size; ++i) { if(x == data[i]) { return i+1; } } return -1; } int Locate(int i) const//定位第i个表项,函数返回表项序号 { if(i > 0 && i <= size+1) { return i; } else { return -1; } } bool getData(int i, T& x) const//取第i个表项的值 { if(i > 0 && i <= size+1) { x = data[i-1]; return true; } return false; } void setData(int i, T& x)//用x修改第i个表项 { if(i > 0 && i <= size+1) { data[i-1] = x; } } bool Insert(int i, T& x)//插入x在第i个表项之后 { int j; if(IsFull()) { reSize(2 * maxSize); } if(i > 0 && i <= size+1) { for(j = size; j >= i; --j) { data[j+1] = data[j]; } data[i] = x; size++; return true; } return false; } bool Remove(int i, T& x)//删除第i个表项,通过x返回表项的值 { if(IsEmpty()) { return false; } if(i > 0 && i <= size+1) { for(int j = i; j <= size; ++j) { data[j-1] = data[j]; } size--; return true; } return false; } bool IsEmpty()//判空 { if(size == -1) { return true; } return false; } bool IsFull()//判满 { if(size == maxSize) { return true; } return false; } void input()//输入 { cout << "开始建立顺序表,请输入表中元素个数:"; while (1) { cin >> size; if (size <= maxSize - 1) { break; } cout << "表元素个数输入有误,范围不能超过" << maxSize - 1 << ":"; } cout << "请输入表中元素:"; for (int i = 0; i < size; ++i) { cin >> data[i]; } } void ouput()//输出 { cout << "顺序表当前元素最后位置为:" << size << endl; for (int i = 0; i < size; ++i) { cout << "#" << i + 1 << ":" << data[i] << endl; } } SeqList<T> operator=(SeqList<T> & L)//表整体赋值 { maxSize = L.maxSize; size = L.Length() - 1; T value; data = new T[maxSize]; assert(data); for (int i = 1; i <= last + 1; ++i) { L.getData(i, value); data[i - 1] = value; } return *this; } private: T * data; //数值 int maxSize; //容量 int size; //大小 void reSize(int newSize)//改变data数组空间的大小 { if(newSize <= 0) { return; } if(newSize > maxSize) { maxSize = newSize; } T *newdata = new T[maxSize]; int n = size+1; for(int i = 0; i < n; ++i) { newdata[i] = data[i]; } delete[] data; data = newdata; } };
相关文章推荐
- c语言_FILE结构体解释及相关操作
- C++开发人脸性别识别教程(3)——OpenCv配置和ImageWatch插件介绍
- C/C++中extern关键字详解
- C++ 学习(使用 using 改写继承类继承成员的性质)
- C++小题(六)
- C++ 学习(派生类到基类准还的可访问性)
- C++开发人脸性别识别教程(2)——VisualStudio初探
- 测试一下
- c++ libjson相关资料
- 如何成为一个C++高级程序员
- 一份C++线程池的代码,非常实用
- OC语言使用“消息结构”(messaging structure)而非“函数调用”(function calling)
- c语言ispunct函数
- 站在巨人的肩膀上,C++开源库大全
- C&C++编译(1)
- Java与C/C++有什么区别
- Java与C/C++有什么区别
- C语言中联合体union的使用
- C++ 服务器客户端编程实例(一)
- C语言中sizeof用法总结