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

📄 linkeddeque.h

📁 用于词法分析的词法分析器
💻 H
字号:
/*  $Id: LinkedDeque.h,v 1.2 1997/02/02 01:31:05 matt Exp $  Deque as double-linked list.    (c) Mar 1995 Matt Phillips.  */#ifndef _LDEQUE_H#define _LDEQUE_H#include "Deque.h"#include "DblLinkList.h"////////////////// LinkedDequeImptemplate <class T, class E> class LinkedDequeImp :  public Deque<T>, protected DblLinkListImp<T, E>{public:  typedef class LinkedDequeImpIter<T, E> Iterator;  LinkedDequeImp () : tail (0) {}  const char *name () const {return Deque<T>::name ();}  int nItems () const {return DblLinkListImp<T, E>::nItems ();}  int isFull () const {return DblLinkListImp<T, E>::isFull ();}  int isEmpty () const {return DblLinkListImp<T, E>::isEmpty ();}  virtual void addHead (T &i);  virtual void addTail (T &i);  virtual void removeHead ();  virtual void removeTail ();     virtual T &peekHead () const {DEQUE_PEEK (head); return head->ref ();}  virtual T &peekTail () const {DEQUE_PEEK (tail); return tail->ref ();}     virtual void clear () {DblLinkListImp<T, E>::clear (); tail = 0;}  virtual Iterator *makeIter () const {return new Iterator (*this);}   protected:     E *tail;  friend class Iterator;};template <class T, class E> class LinkedDequeImpIter :  public DblLinkListImpIter<T, E>{public:     LinkedDequeImpIter (const LinkedDequeImp<T, E> &d) :    DblLinkListImpIter<T, E> (d), tail (d.tail) {}     virtual void resetEnd () {i = tail;}protected:  E *tail;};template <class T, class E>void LinkedDequeImp<T, E>::addHead (T &d){  E *i = new E (d);     if (_nItems > 0)  {    i->next = head;    i->prev = 0;    head->prev = i;    head = i;  } else  {    head = tail = i;    i->next = i->prev = 0;  }     _nItems++;}template <class T, class E>void LinkedDequeImp<T, E>::addTail (T &d){  E *i = new E (d);     if (_nItems > 0)  {    i->next = 0;    i->prev = tail;    tail->next = i;    tail = i;  } else  {    head = tail = i;    i->next = i->prev = 0;  }     _nItems++;}template <class T, class E>void LinkedDequeImp<T, E>::removeHead (){  if (_nItems > 0)  {    if (head == tail)    {      delete head;      head = tail = 0;    } else    {      E *t = head;      head->next->prev = 0;      head = head->next;      delete t;    }    _nItems--;  } else  {    DEQUE_REMOVE;  }}template <class T, class E>void LinkedDequeImp<T, E>::removeTail (){  if (_nItems > 0)  {    if (head == tail)    {      delete head;      head = tail = 0;    } else    {      E *t = tail;      tail->prev->next = 0;      tail = tail->prev;      delete t;    }    _nItems--;  } else  {    DEQUE_REMOVE;  }}#define TypeDLinkedDeque(T)  LinkedDequeImp<T, DDoubleLinkItem<T> >#define TypeIOLinkedDeque(T) LinkedDequeImp<T, IDoubleLinkItem<T, 1> >#define TypeILinkedDeque(T)  LinkedDequeImp<T, IDoubleLinkItem<T, 0> >#endif

⌨️ 快捷键说明

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