#include
#include"assert.h"
using namespace std;
const int LIST_SIZE = 10000;//设置线性表最大存储
class list
{// 基于数组的线性表类
private:
int msize;// 表的最大长度
int numinlist;// 表中元素的实际个数
int curr;// 表中当前元素的位置
char* listarray;// 存储表元素的数组
public:
list(const int sz=LIST_SIZE); // 构造函数
~list();// 析构函数
void clear();// 从表中清除所有元素
void insert(const char&);// 在当前位置插入一个元素
void add(const char&);//在表末尾添加一个元素
char remove();// 删除并返回当前元素的值
void setFirst();// 置光标于第一个位置
void prev();// 移动光标到前一位置
void next();// 移动光标到下一位置
void setPos(const int);// 置光标于指定位置
void setValue(const char&);// 设置当前元素的值
int length() const;// 返回表的当前长度
char currValue() const;// 返回当前元素的值
bool isEmpty() const;// 如果表为空则返回TRUE
bool isInList() const; // 如果光标在表内则返回TRUE
bool find(const char&);// 从当前位置开始寻找元素值
};
list::list(const int sz )//构造函数
{
msize = sz;
numinlist = 0;
listarray =new char[sz];
}
list::~list()
{
delete[] listarray;
}
void list::insert(const char&item)//在当前位置插入元素item
{
if (numinlist < LIST_SIZE && curr >= 0 && curr <= msize)//数组未满且curr位置合理
{
for (int i=numinlist;i>curr;i--)//curr以后的元素全部往后移动一个
{
listarray[i] = listarray[i - 1];
}
listarray[curr] = item;
numinlist++;
}
}
bool list::isEmpty() const// 如果表为空则返回TRUE
{
if (numinlist == 0)
return true;
else return false;
}
bool list::isInList() const // 如果光标在表内则返回TRUE
{
if (curr >= 0 && curr <= msize)
return true;
else return false;
}
void list::setFirst()// 置光标于第一个位置
{
curr = 0;
}
void list::prev()// 移动光标到前一位置
{
curr--;
}
void list::next()// 移动光标到下一位置
{
curr++;
}
void list::setPos(const int p)// 置光标于指定位置
{
curr = p;
}
void list::setValue(const char&elem)// 设置当前元素的值
{
assert(isInList());
listarray[curr] = elem;
}
int list::length() const// 返回表的当前长度
{
return numinlist;
}
char list::currValue() const// 返回当前元素的值
{
assert(isInList());
return listarray[curr];
}
void list::add(const char& item)//在表末尾添加一个元素
{
if (numinlist < LIST_SIZE)
{
listarray[numinlist] = item;
numinlist++;
}
return;
}
char list::remove()// 删除并返回当前元素的值
{
assert(!isEmpty() && isInList());//数组未满且curr位置合理
char temp = listarray[curr];
for (int i = curr; i < numinlist-1; i++)//注意是numinlist-1;位置往前移动一次
listarray[i] = listarray[i + 1];
numinlist--;
return temp;
}
bool list::find(const char&elem)// 从当前位置开始寻找元素值
{
while (isInList())
{
if (listarray[curr] == elem)
return true;
else next();
}
return false;
}
◦
基本思想:用一组连续的存储单元依次存放线性表中各个元素。在C++
中,可以用一个一维
数组来表示。
◦
表中的元素存储在数组中相邻的位置, 对表中任一元素的访问只需푂(1)
时间。
◦
线性表中元素需要满足有序性,线性表 的插入、删除操作需要移动大量元素。所需移动的元素次数的平均次数为푂(n)
数据结构冲鸭!!!!!!!加油学习数据结构!!!!