generic -- We can create a Deque of anything type Element_Type is private; package Deque is -- What do you get when you cross a Stack and a Queue? -- A DEQUE !! ( pronounced Deck) -- Additions and deletions are allowed from both ends -- type Deque_Type is limited private; Overflow: exception; Underflow: exception; ----------------------------------------------------- procedure Clear ( Deque : in out Deque_Type); -- This procedure initializes the Deque to empty ----------------------------------------------------- procedure In_Deque_Front ( Deque : in out Deque_Type; Item : in Element_Type); -- This procedure adds Item to the front of the Deque -- Preconditions : none -- Postconditions: Deque is the original Deque with Item added to -- front -- Exceptions : Overflow is raised if there is no room in -- the Deque for Item. Deque is unchanged ----------------------------------------------------- procedure In_Deque_Back ( Deque : in out Deque_Type; Item : in Element_Type); -- This procedure adds Item to the back ( rear) of the Deque -- Preconditions : none -- Postconditions: Deque is the original Deque with Item added to -- back ( rear) -- Exceptions : Overflow is raised if there is no room in -- the Deque for Item. Deque is unchanged ----------------------------------------------------- procedure Out_Deque_Front ( Deque : in out Deque_Type; Item : out Element_Type); -- This procedure removes Item from the front of the Deque -- Preconditions : none -- Postconditions: -- Deque = the original Deque with the front element removed. -- Item = the element that was removed from the original Deque. -- Exceptions : Underflow is raised if the Deque is empty. -- Deque is unchanged. ----------------------------------------------------- procedure Out_Deque_Back ( Deque : in out Deque_Type; Item : out Element_Type); -- This procedure removes Item from the back (rear)of the Deque -- Preconditions : none -- Postconditions: -- Deque = the original Deque with the back element removed. -- Item = the element that was removed from the original Deque. -- Exceptions : Underflow is raised if the Deque is empty. -- Deque is unchanged. ----------------------------------------------------- procedure Copy ( Target : in out Deque_Type; Source : in Deque_Type); -- This procedure makes Target a copy of Source. -- Preconditions : None -- Postconditions: Target will contain exaclty the same entries -- in the same order as Source. ----------------------------------------------------- function Equal ( Left : in Deque_Type; Right : in Deque_Type) return Boolean; -- This function returns True when left and Right contain the -- same elements in the same order and False otherwise. -- Preconditions : none -- Postconditions: -- Equal = (Left and Right contain the same items in the same order) ----------------------------------------------------- function Full ( Deque: in Deque_Type ) return Boolean; -- This function determines whether or not the Deque is full. -- Preconditions : none -- Postconditions: Full = ( Deque is full) -- ----------------------------------------------------- function Empty ( Deque: in Deque_Type ) return Boolean; -- This function determines whether or not the Deque is empty. -- Preconditions : none -- Postconditions: Full = ( Deque is empty) -- ----------------------------------------------------- function Count ( Deque: in Deque_Type ) return Natural; -- This function counts the number of items in the Deque. -- Preconditions : none -- Postconditions: Count = Number of items in Deque ----------------------------------------------------- private type Node_Type ; type Ptr_Type is access Node_Type; type Node_Type is record Info : Element_Type; Next : Ptr_Type; end record ; type Deque_Type is record Front : Ptr_Type; Back : Ptr_Type; end record; end Deque; -------------------- ______________________________________________________ Get Your Private, Free Email at http://www.hotmail.com