栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

线性表顺序存储C++实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线性表顺序存储C++实现

#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) 数据结构冲鸭!!!!!!!加油学习数据结构!!!!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/304180.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号