Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

C# Console Application: In the assignment, you will write code to enhance the class List. Figure 19.4 of the textbook shows the code of this

C# Console Application:

In the assignment, you will write code to enhance the class List. Figure 19.4 of the textbook shows the code of this class (and other related classes):

// Fig. 19.4: LinkedListLibrary.cs

// ListNode, List and EmptyListException class declarations.

using System;

namespace LinkedListLibrary

{ // class to represent one node in a list

public class ListNode

{

// automatic read-only property Data

public object Data { get; private set; }

// automatic property Next

public ListNode Next { get; set; }

// constructor to create ListNode that refers to dataValue

// and is last node in list

public ListNode( object dataValue )

: this( dataValue, null )

{

} // end default constructor

// constructor to create ListNode that refers to dataValue

// and refers to next ListNode in List

public ListNode( object dataValue, ListNode nextNode )

{

Data = dataValue;

Next = nextNode;

} // end constructor

} // end class ListNode

// class List declaration

public class List

{

private ListNode firstNode;

private ListNode lastNode;

private string name; // string like "list" to display

// construct empty List with specified name

public List( string listName )

{

name = listName;

firstNode = lastNode = null;

} // end constructor

// construct empty List with "list" as its name

public List()

: this( "list" )

{

} // end default constructor

// Insert object at front of List. If List is empty,

// firstNode and lastNode will refer to same object.

// Otherwise, firstNode refers to new node.

public void InsertAtFront( object insertItem )

{

if ( IsEmpty() )

firstNode = lastNode = new ListNode( insertItem );

else

firstNode = new ListNode( insertItem, firstNode );

} // end method InsertAtFront

// Insert object at end of List. If List is empty,

// firstNode and lastNode will refer to same object.

// Otherwise, lastNode's Next property refers to new node.

public void InsertAtBack( object insertItem )

{

if ( IsEmpty() )

firstNode = lastNode = new ListNode( insertItem );

else

lastNode = lastNode.Next = new ListNode( insertItem );

} // end method InsertAtBack

// remove first node from List

public object RemoveFromFront()

{

if ( IsEmpty() )

throw new EmptyListException( name );

object removeItem = firstNode.Data; // retrieve data

// reset firstNode and lastNode references

if ( firstNode == lastNode )

firstNode = lastNode = null;

else

firstNode = firstNode.Next;

return removeItem; // return removed data

} // end method RemoveFromFront

// remove last node from List

public object RemoveFromBack()

{

if ( IsEmpty() )

throw new EmptyListException( name );

object removeItem = lastNode.Data; // retrieve data

// reset firstNode and lastNode references

if ( firstNode == lastNode )

firstNode = lastNode = null;

else

{

ListNode current = firstNode;

// loop while current node is not lastNode

while ( current.Next != lastNode )

current = current.Next; // move to next node

// current is new lastNode

lastNode = current;

current.Next = null;

} // end else

return removeItem; // return removed data

} // end method RemoveFromBack

// return true if List is empty

public bool IsEmpty()

{

return firstNode == null;

} // end method IsEmpty

// output List contents

public void Display()

{

if ( IsEmpty() )

{

Console.WriteLine( "Empty " + name );

} // end if

else

{

Console.Write( "The " + name + " is: " );

ListNode current = firstNode;

// output current node data while not at end of list

while ( current != null )

{

Console.Write( current.Data + " " );

current = current.Next;

} // end while

Console.WriteLine( " " );

} // end else

} // end method Display

} // end class List

// class EmptyListException declaration

public class EmptyListException : Exception

{

// parameterless constructor

public EmptyListException()

: base( "The list is empty" )

{

// empty constructor

} // end EmptyListException constructor

// one-parameter constructor

public EmptyListException( string name )

: base( "The " + name + " is empty" )

{

// empty constructor

} // end EmptyListException constructor

// two-parameter constructor

public EmptyListException( string exception, Exception inner )

: base( exception, inner )

{

// empty constructor

} // end EmptyListException constructor

} // end class EmptyListException

} // end namespace LinkedListLibrary

Enhance the class List by adding two public void methods InsertAfter and Remove.

public void InsertAfter(object insertItem, object targetItem)

{

// This method searches the list for a node that holds the data item

// targetItem. Once this target node is found, create a new node to

// hold the data item insertItem, and insert the newly created node right

// after the target node. Dont forget to update the instance variable

// lastNode if necessary.

// Example: Suppose we have the following list: 7, 2, 13, 5, 8. The call

// InsertAfter(3, 5) will insert 3 after 5. The list after the call will be:

// 7, 2, 13, 5, 3, 8.

// If the targetItem is not found, do not insert anything into the list.

// It the targetItem exists in multiple nodes, insert new node only after

// the first node holding targetItem. For example, suppose we have

// the following list: 7, 2, 1, 2, 5. The call InsertAfter(4, 2) inserts

// 4 only after the first node holding 2. The list after the call will be:

// 7, 2, 4, 1, 2, 5.

}

public void Remove(object targetItem)

{

// This method searches the list for a node that holds the data item

// targetItem. Once this target node is found, remove this node from

// the list. Dont forget to update the instance variables firstNode and

// lastNode if necessary.

// Example: Suppose we have the following list: 7, 2, 13, 5, 8. The call

// Remove(5) removes the node holding 5. The list after the call will be:

// 7, 2, 13, 8.

// If the targetItem is not found, do not remove anything from the list.

// It the targetItem exists in multiple nodes, remove only // the first node holding targetItem. For example, suppose we have

// the following list: 7, 2, 1, 2, 5. The call Remove(2) removes

// the first node holding 2. The list after the call will be:

// 7, 1, 2, 5.

}

Hint: Since both insertAfter and Remove need to search for a node holding a target data item, you may want to write a private Search method for insertAfter and Remove to use.

Use the following code to test your work:

public static void Main(string[] args)

{

List list = new List(); // create List container

// try to insert 3 after 2, should do nothing because the list is empty

Console.WriteLine("Task: Insert 3 after 2");

list.InsertAfter(3, 2);

list.Display();

Console.WriteLine();

// try to remove 2, should do nothing because the list is empty

Console.WriteLine("Task: Remove 2");

list.Remove(2);

list.Display();

Console.WriteLine();

// insert 1 at front

Console.WriteLine("Task: Insert 1 at front");

list.InsertAtFront(1);

list.Display();

// try to insert 3 after 2, should doing nothing because 2 is not there

Console.WriteLine("Task: Insert 3 after 2");

list.InsertAfter(3, 2);

list.Display();

// try to remove 2, should do nothing because 2 is not in the list

Console.WriteLine("Task: Remove 2");

list.Remove(2);

list.Display();

// try to insert 2 after 1

Console.WriteLine("Task: Insert 2 after 1");

list.InsertAfter(2, 1);

list.Display();

// try to insert 4 after 2

Console.WriteLine("Task: Insert 4 after 2");

list.InsertAfter(4, 2);

list.Display();

// try to insert 3 after 2

Console.WriteLine("Task: Insert 3 after 2");

list.InsertAfter(3, 2);

list.Display();

// try to insert 5 after 4

Console.WriteLine("Task: Insert 5 after 4");

list.InsertAfter(5, 4);

list.Display();

// try to remove 2

Console.WriteLine("Task: Remove 2");

list.Remove(2);

list.Display();

// try to remove 1

Console.WriteLine("Task: Remove 1");

list.Remove(1);

list.Display();

// try to remove 5

Console.WriteLine("Task: Remove 5");

list.Remove(5);

list.Display();

// try to remove 3

Console.WriteLine("Task: Remove 3");

list.Remove(3);

list.Display();

// try to remove 4

Console.WriteLine("Task: Remove 4");

list.Remove(4);

list.Display();

Console.WriteLine();

} // end Main

Expected output:

Task: Insert 3 after 2

Empty list

Task: Remove 2

Empty list

Task: Insert 1 at front

The list is: 1

Task: Insert 3 after 2

The list is: 1

Task: Remove 2

The list is: 1

Task: Insert 2 after 1

The list is: 1 2

Task: Insert 4 after 2

The list is: 1 2 4

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Practical Azure SQL Database For Modern Developers Building Applications In The Microsoft Cloud

Authors: Davide Mauri, Silvano Coriani, Anna Hoffma, Sanjay Mishra, Jovan Popovic

1st Edition

1484263693, 978-1484263693

More Books

Students also viewed these Databases questions

Question

1.Which are projected Teaching aids in advance learning system?

Answered: 1 week ago

Question

Provide examples of Dimensional Tables.

Answered: 1 week ago