【C++数据结构学习笔记---线性表】用数组实现线性表

【C++数据结构学习笔记---线性表】用数组实现线性表

一个简单的实现例子,只用到了插入函数以及输出函数,初始化26个英文字母。

插入算法的思路:(insert)

1、线性表已满则不插入任何数据。

2、如果插入位置不合理,程序自动纠正,如插入位置小于1,则修正插入位置为1,插入位置大于length+1,则修正为length+1。

3、从最后一个元素开始向前遍历到第k个位置,分别将它们都向后移动一个位置。

4、将要插入元素填入位置k。

5、表长加1。

删除算法的思路:(erase)

1、如果删除位置不合理,则不删除任何数据。

2、从第k+1个位置开始遍历到最后一个元素,分别将它们都向前移动一个位置。

3、表长减1。

#include 
using namespace std;

#define MAX_LIST_SIZE 20

template 
class ArrList{
	public:
		ArrList(int max_list_size=MAX_LIST_SIZE);	//构造函数
		~ArrList(){delete [] data;}					//析构函数
		bool empty()const {return 0==length;}		//判断表是否为空
		int size()const {return length;}			//判断表的大小
		int locate(const T& x)const;				//返回表中元素x的位置
		bool retrieve(int k,T& x)const;				//返回表中第k个元素x
		ArrList& insert(int k,const T& x);		//在表的位置k插入元素x
		ArrList& erase(int k);					//从表中删除位置k的元素
		void print_list();							//输出表
	private:
		int length;									//记录表长
		int max_size;								//表的最大长度
		T *data;									//记录表中的数组
};
template 
ArrList::ArrList(int max_list_size)
{
	max_size=max_list_size;
	data=new T[max_size];
	length=0;
}
template 
int ArrList::locate(const T& x)const
{
	for(int i=0; i
bool ArrList::retrieve(int k,T& x)const
{
	if ((k<1)||(k>length)){
		return false;	
	}
	x=data[k-1];
	return true;
}
template 
ArrList& ArrList::insert(int k,const T& x)
{
	if (length==max_size) return *this;//线性表已满
	if (k<1) k=1;
	if (k>length+1) k=length+1;
	for(int i=length-1;i>=k-1;--i){
		data[i+1]=data[i];
	}
	data[k-1]=x;
	++length;
	return *this;
}
template 
ArrList& ArrList::erase(int k)
{
	if ((k<1)||(k>length)) return *this;
	if (0==length) return *this;
	for(int i=k;i
void ArrList::print_list()
{
	for(int i=0;i s(30);
	s1='A';
	s2='Z';
	for(int i=s2;i>=s1;--i){
		s.insert(0,i);
	}
	s.print_list();
	return 0;
} 

你可能感兴趣的:(【原创】,数据结构)