DLList.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:5k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 2007 Regents of the SIGNET lab, University of Padova.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. Neither the name of the University of Padova (SIGNET lab) nor the 
  14.  *    names of its contributors may be used to endorse or promote products 
  15.  *    derived from this software without specific prior written permission.
  16.  *
  17.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
  18.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 
  19.  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
  20.  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
  21.  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
  22.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
  23.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
  24.  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
  25.  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
  26.  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
  27.  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  28.  */
  29. #include "NSNode.h"
  30. /**
  31. * Implements a double linked list. To each element in the list it can be associated an Object
  32. *
  33. * @author Simone Merlin
  34. *
  35. * @see Object, CPosition, NSNode
  36. */
  37. class DLList{
  38. public:
  39.  int numElement;
  40.  NSNode* head;
  41.  NSNode* tail;
  42. //Costruttore
  43.  DLList();
  44. ~DLList();
  45. //Metodi privati
  46. /**
  47. * Check if the position is head or tail 
  48. *
  49. * @param p position to check
  50. *
  51. * @return 0 if p is head or tail, otherwise return (NSNode) p 
  52. */
  53. NSNode* checkPosition(CPosition* p );
  54. //METODI DI INTERFACCIA
  55. //Metodi di Container
  56. /**
  57. * Return the number of nodes in the list 
  58. *  
  59. * @return the number of nodes in the list 
  60. */
  61.   int size();
  62. //Metodi di PositionalContainer
  63. /**
  64. * Replace the old object at position p with a new object 
  65. *  
  66. * @param p position
  67. * @param elem object to be inserted
  68. *
  69. */
  70. Object* replace (CPosition* p,Object* elem);
  71.  
  72. /**
  73. * Cehck if the list is empty 
  74. *  
  75. * @return 1 if is empty, 0 otherwise
  76. */
  77. bool isEmpty();
  78.     
  79. /**
  80. * Swap two nodes of the list
  81. *  
  82. * @param p position  1 to swap
  83. * @param p position  2 to swap
  84. */
  85. void swap (CPosition* p, CPosition* q);
  86. // Metodi di PositionalSequence
  87. /**
  88. * Returns the first element in the list
  89. *  
  90. * @return a pointer to the node in the first position
  91. */
  92.  CPosition* first();
  93. /**
  94. * Returns the node in the list, which is located before the specified one
  95. *  
  96. * @param a pointer to the reference node
  97. * @return a pointer to the previous node in the list
  98. */
  99. CPosition* before (CPosition* p);
  100. /**
  101. * Insert a new node in the first position
  102. *  
  103. * @param elem the element to be embedded in the new node 
  104. * @return a pointer to newly created node
  105. */
  106. CPosition* insertFirst(Object* elem);
  107. /**
  108. * Insert a new node in the position before the specified one
  109. *  
  110. * @param p a pointer yo the reference node position 
  111. * @param elem a pointer to the element to be embedded in the new node 
  112. * @return a pointer to newly created node
  113. */
  114. CPosition* insertBefore(CPosition* p,Object* elem);
  115. /**
  116. * Insert a new node in the position after the specified one
  117. *  
  118. * @param p a pointer yo the reference node position 
  119. * @param elem a pointer to the element to be embedded in the new node 
  120. * @return a pointer to newly created node
  121. */
  122. CPosition* insertAfter(CPosition* p,Object* elem);
  123. /**
  124. * Insert a new node in the last position
  125. *  
  126. * @param element a pointer to the element to be embedded in the new node 
  127. * @return a pointer to newly created node
  128. */
  129. CPosition* insertLast (Object* element) ;
  130. /**
  131. * Returns the last element in the list
  132. *  
  133. * @return a pointer to the node in the first position
  134. */
  135. CPosition* last();
  136. /**
  137. * Returns the node in the list, which is located after the specified one
  138. *  
  139. * @param a pointer to the reference node
  140. * @return a pointer to the previous node in the list
  141. */
  142. CPosition* after (CPosition* p);
  143. /**
  144. * remove a node from the list
  145. *  
  146. * @param p pointer to the node which has to be deleted
  147. * @return the object that was embedded in the deleted node 
  148. */
  149. Object* remove (CPosition* p);
  150. /**
  151. * remove the node which is located before the specified position
  152. *  
  153. * @param p pointer to the reference position
  154. * @return the object that was embedded in the deleted node 
  155. */
  156. Object* removeBefore (CPosition* p);
  157. /**
  158. * remove the node which is located after the specified position
  159. *  
  160. * @param p pointer to the reference position
  161. * @return the object that was embedded in the deleted node 
  162. */
  163. Object* removeAfter (CPosition* p);
  164. /**
  165. * remove the first node
  166. *  
  167. * @return the object that was embedded in the deleted node 
  168. */
  169. Object* removeFirst() ;
  170. /**
  171. * remove the last node
  172. *  
  173. * @return the object that was embedded in the deleted node 
  174. */
  175. Object* removeLast();
  176. };