⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alist.h

📁 用栈、顺序表实现四则运算
💻 H
字号:
#ifndef ALIST_H_H
#define ALIST_H_H

/*线性表*/
template<class Elem>class List{
	public:
		virtual void clear()=0;
		virtual bool insert(const Elem&)=0;
		virtual bool append(const Elem&)=0;
		virtual bool remove(Elem&)=0;
		virtual void setStart()=0;
		virtual void setEnd()=0;
		virtual void prev()=0;
		virtual void next()=0;
		virtual int leftLength()const=0;
		virtual int rightLength()const=0;
		virtual bool setPos(int pos)=0;
		virtual bool getValue(Elem&)const=0;
		virtual void print()const=0;
};

/*顺序表*/
template<class Elem>
class AList:public List<Elem>{
	private:
		int maxSize;
		int listSize;
		int fence;
		Elem* listArray;
	public:
		AList(int size=DefaultListSize){
			maxSize=size;
			listSize=fence=0;
			listArray=new Elem[maxSize];
			//			for(int i=0;i<maxSize-2;i++)
			//				{listArray[i]=i;listSize++;}
		}
		~AList(){delete [] listArray;}
		void clear(){
			delete [] listArray;
			listSize=fence=0;
			listArray=new Elem[maxSize];
		}
		bool insert(const Elem&);
		bool append(const Elem&);
		bool remove(Elem&);
		void setStart() {fence=0;}
		void setEnd()	{fence=listSize;}
		void prev()		{if(fence!=0) fence--;}
		void next()		{if(fence<=listSize) fence++;}
		int leftLength()const {return fence;}
		int rightLength()const{return listSize-fence;}
		bool setPos(int pos){
			if((pos>=0)&&(pos<=listSize)) fence=pos;
			return (pos>=0)&&(pos<=listSize);
		}
		bool getValue(Elem& it)const{
			if(rightLength()==0) return false;
			else {it=listArray[fence];return true;}
		}
		void print()const{
			int temp=0;
			cout<<"<";
			while(temp<fence) cout<<" ";
			cout<<"| ";
			while(temp<listSize) cout<<" ";
			cout<<">\n";
		}
		bool reverse(const Elem& it);
};

/*顺序表的插入,追加,删除操作*/
template<class Elem>
bool AList<Elem>::insert(const Elem& item){
	if(listSize==maxSize) return false;
	for(int i=listSize;i>fence;i--)
		listArray[i]=listArray[i-1];
	listArray[fence]=item;
	listSize++;
	return true;
}
template<class Elem>
bool AList<Elem>::append(const Elem& item){
	if(listSize==maxSize) return false;
	listArray[listSize++]=item;
	return true;
}
template<class Elem>
bool AList<Elem>::remove(Elem& it){
	if(rightLength()==0) return false;
	it=listArray[fence];
	for(int i=fence;i<listSize-1;i++)
		listArray[i]=listArray[i+1];
	listSize--;
	return true;
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -