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

📄 list.h

📁 美国加州大学操作系统课程实验平台Nachos
💻 H
字号:
// list.h //	Data structures to manage LISP-like lists.  ////      As in LISP, a list can contain any type of data structure//	as an item on the list: thread control blocks, //	pending interrupts, etc.  Allocation and deallocation of the//	items on the list are to be done by the caller.//// Copyright (c) 1992-1996 The Regents of the University of California.// All rights reserved.  See copyright.h for copyright notice and limitation // of liability and disclaimer of warranty provisions.#ifndef LIST_H#define LIST_H#include "copyright.h"#include "debug.h"// The following class defines a "list element" -- which is// used to keep track of one item on a list.  It is equivalent to a// LISP cell, with a "car" ("next") pointing to the next element on the list,// and a "cdr" ("item") pointing to the item on the list.//// This class is private to this module (and classes that inherit// from this module). Made public for notational convenience.template <class T>class ListElement {  public:    ListElement(T itm); 	// initialize a list element    ListElement *next;	     	// next element on list, NULL if this is last    T item; 	   	     	// item on the list};// The following class defines a "list" -- a singly linked list of// list elements, each of which points to a single item on the list.// The class has been tested only for primitive types (ints, pointers);// no guarantees it will work in general.  For instance, all types// to be inserted into a list must have a "==" operator defined.template <class T> class ListIterator;template <class T>class List {  public:    List();			// initialize the list    virtual ~List();		// de-allocate the list    virtual void Prepend(T item);// Put item at the beginning of the list    virtual void Append(T item); // Put item at the end of the list    T Front() { return first->item; }    				// Return first item on list				// without removing it    T RemoveFront(); 		// Take item off the front of the list    void Remove(T item); 	// Remove specific item from list    bool IsInList(T item) const;// is the item in the list?    unsigned int NumInList() { return numInList;};    				// how many items in the list?    bool IsEmpty() { return (numInList == 0); };    				// is the list empty?     void Apply(void (*f)(T)) const;     				// apply function to all elements in list    virtual void SanityCheck() const;					// has this list been corrupted?    void SelfTest(T *p, int numEntries);				// verify module is working  protected:    ListElement<T> *first;  	// Head of the list, NULL if list is empty    ListElement<T> *last;	// Last element of list    int numInList;		// number of elements in list    friend class ListIterator<T>;};// The following class defines a "sorted list" -- a singly linked list of// list elements, arranged so that "Remove" always returns the smallest // element. // All types to be inserted onto a sorted list must have a "Compare"// function defined://	   int Compare(T x, T y) //		returns -1 if x < y//		returns 0 if x == y//		returns 1 if x > ytemplate <class T>class SortedList : public List<T> {  public:    SortedList(int (*comp)(T x, T y)) : List<T>() { compare = comp;};    ~SortedList() {};		// base class destructor called automatically    void Insert(T item); 	// insert an item onto the list in sorted order    void SanityCheck() const;	// has this list been corrupted?    void SelfTest(T *p, int numEntries);				// verify module is working  private:    int (*compare)(T x, T y);	// function for sorting list elements    void Prepend(T item) { Insert(item); }  // *pre*pending has no meaning 				             //	in a sorted list    void Append(T item) { Insert(item); }   // neither does *ap*pend };// The following class can be used to step through a list. // Example code://	ListIterator<T> *iter(list); ////	for (; !iter->IsDone(); iter->Next()) {//	    Operation on iter->Item()//      }template <class T>class ListIterator {  public:    ListIterator(List<T> *list) { current = list->first; } 				// initialize an iterator    bool IsDone() { return current == NULL; };				// return TRUE if we are at the end of the list    T Item() { ASSERT(!IsDone()); return current->item; };				// return current element on list    void Next() { current = current->next; };						// update iterator to point to next  private:    ListElement<T> *current;	// where we are in the list};#include "list.cc"		// templates are really like macros				// so needs to be included in every				// file that uses the template#endif // LIST_H

⌨️ 快捷键说明

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