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

📄 lista.h

📁 "tiny" language interpreter written in java
💻 H
字号:
#ifndef LISTA_H_#define LISTA_H_#include <stdexcept> using std::logic_error;#include<iostream>using std::cout;using std::endl;namespace cap3_autoreferencia {  // @{\it Para utilizar a classe Lista<T> o tipo de dado fornecido no}@   // @{\it lugar do par\^ametro de tipo T deve possuir um construtor de}@   // @{\it c\'opia e os operadores <<, ==, !=, e = sobrecarregados.}@	template <class T> class Lista {	private:	  class Celula {		friend class Lista<T>;		private:		  T *item;	    Celula *prox;		  Celula () { item = 0; prox = 0; }		  ~Celula () { if (item != 0) delete item; }		};	  Celula *primeiro, *ultimo, *pos;	public:		Lista (); // @{\it Cria uma Lista vazia}@		T *pesquisa (const T& chave) const;		void insere (const T& x);  		// @{\it Insere antes do primeiro item da lista}@	  void inserePrimeiro (T& item);		T *retira (const T& chave) throw ( logic_error );		T *retiraPrimeiro () throw ( logic_error );    T *_primeiro ();    T *proximo ();		bool vazia () const;		void imprime () const;		~Lista ();	};		template <class T> Lista<T>::Lista () {	  this->primeiro = new Celula (); this->pos = this->primeiro;	  this->ultimo = this->primeiro; this->primeiro->prox = 0;	}		template <class T>		void Lista<T>::insere (const T& x) {  	  this->ultimo->prox = new Celula (); 	  this->ultimo = this->ultimo->prox; 	  this->ultimo->item = new T (x); this->ultimo->prox = 0;	}	// @{\it Insere antes do primeiro item da lista}@	template <class T>	  void Lista<T>::inserePrimeiro (T& item) {    Celula *aux =  this->primeiro->prox;    this->primeiro->prox = new Celula ();    this->primeiro->prox->item = new T(item);    this->primeiro->prox->prox = aux;  }		template <class T>		T *Lista<T>::pesquisa (const T& chave) const {	  if (this->vazia ()) return 0;	  Celula *aux = this->primeiro;	  while (aux->prox != 0) {	    if (*(aux->prox->item) == chave) return aux->prox->item;	    aux = aux->prox;	  }	  return 0;	}		template <class T>		T *Lista<T>::retira (const T& chave) throw ( logic_error ) {	  if (this->vazia ()) throw logic_error ("Erro: A lista esta vazia");	  Celula *aux = this->primeiro;	  while (aux->prox != 0 && *(aux->prox->item) != chave) aux=aux->prox;	  if (aux->prox == 0) return 0; 	  Celula *q = aux->prox;	  T *item = q->item; aux->prox = q->prox;	  q->item = 0; // @{\it transfere a posse da mem\'oria}@	  if (aux->prox == 0) this->ultimo = aux;	  delete q; return item;	}			template <class T>		T *Lista<T>::retiraPrimeiro () throw ( logic_error ) {	  if (this->vazia ()) throw logic_error ("Erro: A lista esta vazia");	  Celula *aux = this->primeiro;	  Celula *q = aux->prox;	  T *item = q->item; aux->prox = q->prox;	  q->item = 0; // @{\it transfere a posse da mem\'oria}@    	  if (aux->prox == 0) this->ultimo = aux;	  delete q; return item;	}  template <class T> T *Lista<T>::_primeiro () {    this->pos = this->primeiro;     return this->proximo ();  }  template <class T> T *Lista<T>::proximo () {    this->pos = this->pos->prox;    if (this->pos == NULL) return NULL;     else return this->pos->item;  }	template <class T>	bool Lista<T>::vazia () const { 		return (this->primeiro == this->ultimo);	}		template <class T>		void Lista<T>::imprime () const {		Celula *aux = this->primeiro->prox;	  while (aux != 0) { cout << *(aux->item) << endl; aux = aux->prox; }	}	  	template <class T> Lista<T>::~Lista () {	  Celula *aux = this->primeiro;	  while (aux != 0) {	  	this->primeiro = this->primeiro->prox;	  	delete aux; aux = this->primeiro;	  }	}}#endif 

⌨️ 快捷键说明

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