频道栏目
首页 > 资讯 > 其他 > 正文

线性表之顺序表解析

18-07-28        来源:[db:作者]  
收藏   我要投稿

1. 顺序表是在计算机内存中以数组的形式保存的线性表。

2. 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表

3. 优点:存取速度高效,通过下标来直接存储

缺点:插入和删除比较慢

4. 基本操作:

5. 具体的代码实现:

#define _CRT_SECURE_NO_WARNINGS
#include
using namespace std;
#include
#include
typedef int DataType;

class SeqList
{
public:
	SeqList()
		:_a(NULL), _size(0), _capacity(0)
	{}
	SeqList(const SeqList& s)
		:_a(new DataType[s._capacity])
		, _size(s._size)
		, _capacity(s._capacity)
	{
		memcpy(_a, s._a, sizeof(DataType)*_size);
	}
	SeqList& operator=(SeqList s)
	{
		if (this != &s)
		{
			Swap(s);
		}
		return *this;
	}
	~SeqList()
	{
		delete[]_a;
		_size = _capacity = 0;
	}

	void Swap(SeqList& s)
	{
  swap(_a,s._a);
  swap(_size,s._size);
  swap(_capacity,s._capacity);
	}
	void PushBack(DataType x)
	{
		Insert(_size, x);
	}
	void PopBack()
	{
		Erase(_size);
	}
	void PushFront(DataType x)
	{
		Insert(0, x);
	}
	void PopFront()
	{
		Erase(0);
	}
	void Insert(size_t pos, DataType x)//在pos位前面插入数据x
	{
		assert(pos <= _size);
		if (_size >= _capacity)
		{
			_capacity = 2 * _capacity + 3;
			_size++;
			DataType *tmp = new DataType[_capacity];//扩容开空间
			for (size_t i = 0; i < pos; ++i)//将数据复制到新空间
				tmp[i] = _a[i];
			tmp[pos] = x;
			for (size_t i = pos + 1; i < _size; ++i)
				tmp[i] = _a[i - 1];

			delete[]_a;
			_a = tmp;
		}
		else
		{
			_size++;
			for (size_t i = _size - 1; i > pos; --i)
			{
				_a[i] = _a[i - 1];
			}
			_a[pos] = x;
		}
	}
	void Erase(size_t pos)
	{
		assert(_size&&pos <= _size);
		--_size;
		for (size_t i = pos; i < _size; ++i)
			_a[i] = _a[i + 1];
	}
	DataType& operator[](size_t pos)
	{
		assert(pos < _size);
		return _a[pos];
	}
	void Print()
	{
		for (size_t i = 0; i < _size; ++i)
			cout << _a[i] << " ";
		cout << endl;
	}
private:
	DataType* _a;
	size_t _size;
	size_t _capacity;
};
int main()
{
	SeqList s1;
	s1.PushFront(1);
	s1.PushFront(2);
	s1.PushFront(3);
	s1.PushFront(4);
	s1.Print();
	s1.Insert(1, 10);
	s1.Print();

	system("pause");
	return 0;
}
相关TAG标签
上一篇:OpManager12完整的网络管理解决方案解析
下一篇:Java之Docker安装与启动学习
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站