【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 <iostream>
using namespace std;

#define MAX_LIST_SIZE 20

template <typename T>
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<T>& insert(int k,const T& x);		//在表的位置k插入元素x
		ArrList<T>& erase(int k);					//從表中刪除位置k的元素
		void print_list();							//輸出表
	private:
		int length;									//記錄表長
		int max_size;								//表的最大長度
		T *data;									//記錄表中的數組
};
template <typename T>
ArrList<T>::ArrList(int max_list_size)
{
	max_size=max_list_size;
	data=new T[max_size];
	length=0;
}
template <typename T>
int ArrList<T>::locate(const T& x)const
{
	for(int i=0; i<length; ++i){
		if (data[i]==x) return ++i;
	}
	return 0;
}
template <typename T>
bool ArrList<T>::retrieve(int k,T& x)const
{
	if ((k<1)||(k>length)){
		return false;	
	}
	x=data[k-1];
	return true;
}
template <typename T>
ArrList<T>& ArrList<T>::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 <typename T>
ArrList<T>& ArrList<T>::erase(int k)
{
	if ((k<1)||(k>length)) return *this;
	if (0==length) return *this;
	for(int i=k;i<length;++i){
		data[k-1]=data[k];
	}
	--length;
	return *this;
}
template <typename T>
void ArrList<T>::print_list()
{
	for(int i=0;i<length;i++){
		cout <<data[i] <<" ";
	}
}
int main()
{
	int s1,s2;
	ArrList<char> s(30);
	s1='A';
	s2='Z';
	for(int i=s2;i>=s1;--i){
		s.insert(0,i);
	}
	s.print_list();
	return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章