您的位置:首页 > 编程语言 > C语言/C++

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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: