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

📄 linkstack.h

📁 编寫一個Stackf类,包括對該stack的實現
💻 H
字号:
enum Error_code{success,overflow,underflow};
template<class T>class LinkStack;
template<class T>
class Node{ //结点类
	friend class LinkStack<T>;    //定义一个友元类
	public:
	Node(){next=null;}
	Node(const T&,Node<T>* =null);
	private:
		T data;   //数据域
		Node<T>* next; //指针域
};
template<class T>
Node<T>::Node(const T& e,Node<T>* link){
	data=e;
	next=link;
}
template<class T>
class LinkStack{  //链栈类
	public:
		LinkStack(){first=null}; //初始化头指针为空指针
		LinkStack(const LinkStack<T>&);//拷贝构造函数
		~LinkStack();
		void operator=(const LinkStack<T>&); //赋值重载
		bool empty(){return first==null}; 
		Error_code push(const T&); //将一个数据压入栈中
		Error_code pop(); //弹出(或删除)栈顶元素
		Error_code top(T&); //取栈顶元素
	private:
		Node<T>* first; //链栈头指针
};
template<class T>
LinkStack<T>::LinkStack(const LinkStack<T>& another){
	Node<T>* work1,work2=another.first; //定义两个工作指针
	first=null;
	while(another.work2){ //若work2不为空时则将其所指的结点复制给first链
		if(!first)   //若first为空时
			work1=first=new Node<T>(work2->data);
		else{   //若first不为空时
			work1->next=new Node<T>(work2->data);
			work1=work1->next;
		}
		work2=work2->next;
	}
	return;
}
template<class T>
LinkStack<T>::~LinkStack(){
	Node<T>* work;
	while(first){        //将链中结点逐个释放
		work=first->next;
		delete first;
		first=work;
	}
	return;
}
template<class T>
void LinkStack<T>::operator=(const LinkStack<T>& another){
	Node<T>* work1,work2=another.first; //定义两个工作指针
	while(first){   //先将原队列删除
		work1=frist->next;
		delete first;
		frist=work1;
	}
	while(another.work2){ //若work2不为空时则将其所指的结点复制给first链
		if(!first)  //若first为空时
			work1=first=new Node<T>(work2->data);
		else{   //若first不为空时
			work1->next=new Node<T>(work2->data);
			work1=work1->next;
		}
		work2=work2->next;
	}
	return;
}
template<class T>
Error_code LinkStack<T>::push(const T& e){
	Node<T>* New=new Node<T>;
	if(!New) return overflow;  //若内存不中时
	New->data=e; 
	//将New所指结点接和栈顶
	New->next=first;
	first=New;
	return success;
}
template<class T>
Error_code LinkStack<T>::pop(){
	if(!first) return underflow;  //若first为空
	Node<T>* temp=first;
	first=first->next;
	//删除栈顶元素
	delete temp;
	return success;
}
template<class T>
Error_code LinkStack<T>::top(T& e){
	if(!first) return underflow;
	//用e返回栈顶元素
	e=first->data;
	return success;
}










⌨️ 快捷键说明

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