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

📄 generic-q.cc

📁 早期freebsd实现
💻 CC
字号:
// From: "Douglas C. Schmidt" <schmidt@glacier.ics.uci.edu>// Date: Sun, 25 Sep 88 16:19:35 -0700#include <stream.h>#include <ctype.h>#include <String.h>#include <generic.h>#include <stdlib.h>#define queue(type) name2(type,queue)#define list(type) name2(type,list)#define queuedeclare(type)                     \class queue(type) {                            \   struct list(type) {                         \      type item;                               \      list(type) *next;                        \   } *head;                                    \   int sz;                                     \public:                                        \   queue(type)(void) {head = 0;sz = 0;}        \   ~queue(type)(void) {                        \      list(type) *temp;                        \      while (head) {                           \         temp = head;                          \         head = head->next;                    \         delete temp;                          \      }                                        \   }                                           \   int  empty(void) {return(!head);}           \   int  size(void) {return(sz);}               \   void enqueue(type new_item);                \   type front(void) {                          \      return(head->next->item);                \   }                                           \   type dequeue(void);                         \};#define queueimplement(type)                   \type queue(type)::dequeue(void) {              \   if (!head)                                  \      abort();                                 \   type temp = head->next->item;               \   list(type) *temp_ptr;                       \   if ((temp_ptr = head->next) == head) {      \      head = 0;                                \   }                                           \   else {                                      \      head->next = temp_ptr->next;             \   }                                           \   delete temp_ptr;                            \   sz--;                                       \   return(temp);                               \}                                              \void queue(type)::enqueue(type new_item) {     \   if (!head) {                                \      head       = new list(type);             \      head->item = new_item;                   \      head->next = head;                       \   }                                           \   else {                                      \      list(type) *temp_node  = new list(type); \      temp_node->item  = new_item;             \      temp_node->next  = head->next;           \      head->next       = temp_node;            \      head             = temp_node;            \   }                                           \   sz++;                                       \}                                              \ queuedeclare(String);queueimplement(String);queuedeclare(double);queueimplement(double);main() {   String Buf;   queue(String) Q_String;   queue(double) Q_double;   while (cin >> Buf) {      if (Buf.matches(RXalpha)) {         Q_String.enqueue(String(Buf));      }      else if (Buf.matches(RXdouble)) {         Q_double.enqueue(atof(Buf));      }      }   while (!Q_String.empty()) {      cout << "Size = " << Q_String.size() << ",Item = "            << Q_String.front() << "\n";      void(Q_String.dequeue());   }   while (!Q_double.empty()) {      cout << "Size = " << Q_double.size() << ",Item = "            << Q_double.front() << "\n";      void(Q_double.dequeue());   }   return (0);}

⌨️ 快捷键说明

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