Python Basic

Overview and Requirements

For this assignment, you will implement a series of functions that test and implement sorting in linked lists containing numeric data (not any other data type).

Your implementation is permitted to include, but does not have to include, your own “helper functions” which you may implement and must comment clearly.

Your implementation is not permitted to include:

  • input from the user;
  • output to the screen (e.g., debugging statements) beyond that in the testing script;
  • any usage of Python’s built-in listtype in any way beyond that in the testing script.

Any assignment submission which uses Python’s built-in list type will receive a grade of zero.

Terminology

Non-decreasing order

A collection ordered such that each element is greater than or equal to the previous element (i.e., sorted with duplicates). For example, [1, 3, 5, 5, 7, 9, 9] is in non-decreasing order but [1, 3, 5, 3] is not.

Starting Code

Download a copy of Assn2Skeleton.py from OnQ and rename it Assignment2.py for your assignment submission. It contains some functions that will be useful for testing and the “stubs” of the functions you have to write for this assignment.

Your functions MAY NOT call these functions directly or use the Python built-in list type in any way. You may write additional helper functions of your own and use them in your required functions if you wish.

Functions

isSorted (4 points)

Write a function called isSorted which takes a linked list of numbers as a parameter and returns True if the list is sorted in non-decreasing order and False otherwise.

For example, if you create a linked list that is equivalent to [2,3,5,9], calling isSorted with that list should return True. But for a linked list equivalent to [2,3,9,5], it should return False.

Your function must not change the list or print anything, just return a Boolean result.

noDuplicates (4 points)

Write a function called noDuplicates which takes a linked list of numbers as a parameter. You may assume that this list is sorted in non-decreasing order. Your function must remove any duplicates from the list and return a pointer to the changed version of this list.

For example, if linkedListOfNumbers is a linked list equivalent to [2,2,3,5,5,5,5,7,7] and you call linkedListOfNumbers = noDuplicates(linkedListOfNumbers), linkedListOfNumbers should now contain to a linked list equivalent to [2,3,5,7].

insertInOrder (4 points)

Write a function called insertInOrder which takes two parameters:

1.a linked list of numbers, which you may assume is sorted in non-decreasing order; and,

2.a new value to add to the list (you may assume it’s a number)

Your function must add the value to the list and return a pointer to the changed version of the list. If the list already contains the value, add it as a duplicate.

For example, if linkedListOfNumbers is a linked list equivalent to [1,3,5,7] and you call linkedListOfNumbers = insertInOrder(linkedListOfNumbers, 5), linkedListOfNumbers should now point to a linked list equivalent to [1,3,5,5,7].

sortLinkedList (4 points)

This function must take a linked list of numbers as a parameter and return a pointer to a new list which contains the same values as the original list but is sorted in non-decreasing order. The linked list passed as a parameter must not be changed.

For example, if linkedListOfNumbers is a linked list equivalent to [4,2,6,3,4] and you call orderedLinkedListOfNumbers = sort(linkedListOfNumbers), orderedLinkedListOfNumbers should point to a linked list equivalent to [2,3,4,4,6] but linkedListOfNumbersshould still be [4,2,6,3,4] after the call.

The simplest way to do this sort is to use an algorithm called an “insertion sort”. Start with an empty list and add each element of the parameter list into the new list, putting it in the correct position to keep the new list in order. Once you’ve got insertInOrder working, this sort should be fairly easy.

Testing Script

Please download a copy of Assn2Testing.py from OnQ. This script will help you determine if your solution meets the administrative requirements for this assignment.

If you run it with your solution and it loads and runs without errors, it means that you have got all the right names, numbers of parameters, etc, and that your functions work correctly on one small test case. It is by no means a guarantee that your functions will work correctly with all examples, so you should also try your own test cases as well.

If you’re not able to write all of the functions for this assignment, this testing script can still be useful. You can comment out the parts relating to the functions you were not able to complete.

Leave a Reply

Your email address will not be published. Required fields are marked *