1 / 26

Implementing a Sorted List as a Linked Structure

Implementing a Sorted List as a Linked Structure. CS 308 – Data Structures. SortedList Class Specification. private: int length; NodeType<ItemType>* listData; NodeType<ItemType>* currentPos; };. template <class ItemType> struct NodeType; template<class ItemType>

triage
Download Presentation

Implementing a Sorted List as a Linked Structure

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Implementing a Sorted List as a Linked Structure CS 308 – Data Structures

  2. SortedList Class Specification private: int length; NodeType<ItemType>* listData; NodeType<ItemType>* currentPos; }; template <class ItemType> struct NodeType; template<class ItemType> class SortedType { public: SortedType(); ~SortedType(); void MakeEmpty(); bool IsFull() const; int LengthIs() const; void RetrieveItem(ItemType&, bool&); void InsertItem(ItemType); void DeleteItem(ItemType); void ResetList(); bool IsLastItem() const; void GetNextItem(ItemType&);

  3. Function RetrieveItem

  4. Function RetrieveItem (cont.) template<class ItemType> void SortedType<ItemType>::RetrieveItem(ItemType& item, bool& found) { NodeType<ItemType>* location; location = listData; found = false; while( (location != NULL) && !found) { if (location->info < item) location = location->next; else if (location->info == item) { found = true; item = location->info; } else location = NULL; // no reason to continue } }

  5. Can we use Binary Search with linked lists?

  6. Function InsertItem

  7. Function InsertItem (cont.) • Can we compare one item ahead?? (like in the unsorted list case?) • In general, we must keep track of the previous pointer, as well as the current pointer.

  8. Function InsertItem (cont.) prevLoc = location location= location->next

  9. Inserting an element at the beginning of the list Case 1 newNode->next= location; listData=newNode;

  10. Inserting an element in the middle of the list newNode->next=location; prevLoc->next = newNode; Case 2

  11. Inserting an element atthe end of the list prevLoc->next = newNode; newNode->next=location; Case 3

  12. Inserting into an empty list listData=newNode; newNode->next=location; Case 4

  13. Function InsertItem (cont.) template <class ItemType> void SortedType<ItemType>::InsertItem(ItemType newItem) { NodeType<ItemType>* newNode; NodeType<ItemType>* predLoc; NodeType<ItemType>* location; bool stop; stop = false; location = listData; predLoc = NULL; while( location != NULL && !stop) { if (location->info < newItem) { predLoc = location; location = location->next; } else stop = true; }

  14. Function InsertItem (cont.) newNode = new NodeType<ItemType>; newNode->info = newItem; if (predLoc == NULL) { newNode->next = listData; cases (1) and (4) listData = newNode; } else { newNode->next = location; predLoc->next = newNode; cases (2) and (3) } length++; }

  15. Function DeleteItem • The DeleteItem we wrote for unsorted lists works for sorted lists as well • Another possibility is to write a new DeleteItem based on the following cases

  16. Deleting the only element in the list

  17. Delete the first element in the list

  18. Delete an element in the middle of the list

  19. Delete the last element in the list

  20. Other SortedList functions • Same as in the case of UnsortedList class

  21. Write a client function that takes two lists (unsorted or sorted) and returns a Boolean indicating whether the second list is a sublist of the first. • (i.e., the first list contains all the elements of the second list but may also contain other elements).

  22. bool IsSubList (SortedType list1, SortedType list2) { ItemType item; bool subList, found; sublist = true; list2.ResetList(); while ( !list2.IsLastItem() && sublist ) { list2.GetNextItem (item); list1.RetrieveItem (item, found); if (!found) sublist = false; } return sublist; }

  23. Write a member function that returns a pointer to the minimum node (i.e. the node storing the smallest value) of an unsorted list. • Precondition: list is not empty. • How would you implement the same function if the list was sorted? (assume that the elements in a sorted list are sorted in increasing order).

  24. NodeType<ItemType>* UnsortedType<ItemType>::MinNode() { NodeType<ItemType * location, *tempLocation; ItemType minItem; minItem = listData->info; tempLocation = listData; location = listData; while (location->next != NULL) { location = location->next; if (location->info < minItem) { minItem=location->info; tempLocation=location; } } return tempLocation; } If the list is sorted, then you just need to return “listData” (pointer to the first element).

  25. Comparing sorted list implementations

  26. Exercises • 9, 15 - 18

More Related