Aoki Job Seeker

顺序表的简单实现


顺序表的简单实现



写在前面

  数据结构是一个数据对象,同时这个对象的实例以及构成实例的元素都存在着联系,而且这些联系是由相关函数来规定的。
  研究数据结构,关心的是数据对象(实际上是实例)的描述以及相关函数的具体实现。数据对象描述得好,函数的实现就会高效。
  最常用的数据对象以及操作都已经在C++中作为基本数据类型而实现,如整数对象,布尔对象等。其他数据对象均可以用基本数据类型以及由C++的类、数组和指针所提供的组合功能来实现。


1.线性表的数据结构

  线性表(linear list)也称有序表,它的每一个实例都是元素的一个有序集合。
  对线性表实施的操作有:

  • 创建一个线性表
  • 撤销一个线性表
  • 确定线性表是否为空
  • 确定线性表的长度
  • 按给定的索引查找一个元素
  • 按一个给定的元素查找其索引
  • 按一个给定的索引删除一个元素
  • 按一个给定的索引插入一个元素
  • 从左至右顺序输出线性表元素

  用顺序存储结构存储的表称为顺序表(sequent list)。顺序表中任意数据元素的存取和访问都可以通过它的位置指针来(即数组下标)进行访问。对顺序表中元素访问的效率是一个比较重要的问题。通常情况下,有序顺序表的访问效率大大高于无序顺序表的访问效率。


2.顺序表的类定义


typedef int Seqlist_Entry;
const int maxsize = 10;
class Seqlist
{
public:
	Seqlist();//构造函数
	~Seqlist();//析构函数
	int listsize()const;//返回元素的个数
	bool listempty() const;//判断表是否为空
	int find(const Seqlist_Entry  &item);//返回元素item在表中的位置
	Seqlist_Entry getdata(int pos) const;//返回位置pos的元素
	void insert(const Seqlist_Entry  &item, int pos);//在位置pos处插入元素item
	Seqlist_Entry  Delete(const int pos);//删除位置pos的元素并返回
	void clearlist();//清空表
	void showall() const;//输出表
private:
	Seqlist_Entry  data[maxsize];
	int size;//数据元素的个数
};


3.顺序表的类实现

//构造函数
Seqlist::Seqlist()
{
	size = 0;
}
//析构函数
Seqlist::~Seqlist() {}

//返回顺序表元素的个数
int Seqlist::listsize() const
{
	return size;
}
//判断顺序表是否为空
bool Seqlist::listempty() const
{
	return (size == 0);
}
//查找item,并返回位置索引
int Seqlist::find(const Seqlist_Entry & item)
{
	if (size == 0)
	{
		cout << "list is empty " << endl;
	}
	int i = 0;
	while (i < size&&item != data[i])
	{
		i++;
	}
	if (i < size)
		return i;
	else
		cout << "illegal operator" << endl;
}
//取出pos位置上的元素
Seqlist_Entry Seqlist::getdata(int pos) const
{
	if (pos<0 || pos>size - 1)
	{
		cout << "illegal operator" << endl;
		exit(1);
	}
	return data[pos];
}
//在pos位置插入元素item
void Seqlist::insert(const Seqlist_Entry & item, int pos)
{
	if (size == maxsize)
	{
		cout << "list is full" << endl;
		return;
	}
	if (pos<0 || pos>size )
	{
		cout << "illegal operator" << endl;
		return;
	}
	for (int i = size; i > pos; i--)
	{
		data[i] = data[i - 1];
	}
	data[pos] = item;
	size++;
}
//删除pos位置的元素
Seqlist_Entry Seqlist::Delete(const int pos)
{
	Seqlist_Entry tmp=data[pos];
	if (size == 0)
	{
		cout << "list is empty" << endl;
		exit(1);
	}
	if (pos<0 || pos>size - 1)
	{
		cout << "illegal operator" << endl;
		exit(1);
	}
	for (int i = pos; i < size-1; i++)
	{
		data[i] = data[i + 1];
	}
	size--;
	return tmp;
}
//置顺序表为空
void Seqlist::clearlist()
{
	size = 0;
	cout << "已清空" << endl;
}
//输出顺序表中所有元素
void Seqlist::showall() const
{
	if (size == 0)
	{
		cout << "list is empty" << endl;
	}
	for (int i = 0; i < size; i++)
	{
		cout <<i<<"号元素:"<< data[i] << endl;
	}
}

4.测试主函数

void test()
{
	Seqlist list;
	for (int i = 0; i < 10; i++)
	{
		list.insert(i * 12, i);
	}
	for (int i = 0; i < 10; i++)
	{
		cout << list.getdata(i) << endl;
	}
	int tmp = list.Delete(2);
	cout << "元素" << tmp << "已经被删除了" << endl;
	list.showall();
	cout<<"84在顺序表的"<<list.find(84)<<"号位置"<<endl;
	list.clearlist();
	list.showall();
}

int main()
{
	test();

}


输出结果如下图:







The End



Similar Posts

上一篇 栈的实现

下一篇 单循环链表

Comments