of 41/41
Chris Kiekintveld CS 2401 (Fall 2010) Elementary Data Structures and Algorithms Linked Lists

Post on 12-Nov-2015

8 views

Category:

## Documents

Embed Size (px)

DESCRIPTION

Data structures.Very important topic.Should be known by everyone.

TRANSCRIPT

• Chris Kiekintveld CS 2401 (Fall 2010)

Elementary Data Structures and Algorithms

• Motivation

Suppose I have an array: 1,4,10,19,6 I want to insert a 7 between the 4 and the 10 What do I need to do?

Java Programming: Program Design Including Data Structures 2

• Java Programming: Program Design Including Data Structures 3

Linked Lists aka Reference-Based Lists

Linked list List of items, called nodes The order of the nodes is determined by the address,

called the link, stored in each node Every node (except the last node) contains the

address of the next node Components of a node

Data: stores the relevant information Link: stores the address of the next node

• Java Programming: Program Design Including Data Structures 4

Figure 16-1 Structure of a node

Figure 16-2 Linked list

Head or first Holds the address of the first node in the list

The info part of the node can be either a value of a primitive type or a reference to an object

• Java Programming: Program Design Including Data Structures 5

Class Node Represents nodes on a list It has two instance variables

info (of type int, but it can be any other type) link (of type Node)

public class Node { public int info; public Node link; }

• Java Programming: Program Design Including Data Structures 6

Linked List: Some Properties

Figure 16-4 Linked list with four nodes

• Java Programming: Program Design Including Data Structures 7

Linked List: Some Properties Now consider the statement current = head;

Figure 16-5 Linked list after current = head; executes

• Java Programming: Program Design Including Data Structures 8

Linked List: Some Properties Now consider the statement

Figure 16-6 List after the statement current = current.link;

• Java Programming: Program Design Including Data Structures 9

Linked List: Some Properties

• Java Programming: Program Design Including Data Structures 10

Traversing a Linked List

Basic operations of a linked list that require the link to be traversed Search the list for an item Insert an item in the list Delete an item from the list

You cannot use head to traverse the list You would lose the nodes of the list Use another reference variable of the same type as head: current

• Java Programming: Program Design Including Data Structures 11

Traversing a Linked List

The following code traverses the list

current = head; while (current != null) { //Process current current = current.link; }

• Java Programming: Program Design Including Data Structures 12

Exercise

Write code to print out the data stored in each node in a linked list

current = head; while (current != null) { System.out.println(current.info + ); current = current.link; }

• Java Programming: Program Design Including Data Structures 13

Exercise

Write code to set the data in the 5th node to be 10

current = head; cnt = 0; while (cnt < 4 && current != null) { current = current.link; } if (current != null) { current.info = 10; }

• Java Programming: Program Design Including Data Structures 14

Insertion

Consider the following linked list

You want to create a new node with info 50 and insert it after p

Figure 16-7 Linked list before item insertion

• Java Programming: Program Design Including Data Structures 15

Insertion The following statements create and store 50 in the info field of a new node

Node newNode = new Node(); //create newNode newNode.info = 50; //store 50 in the new node

Figure 16-8 Create newNode and store 50 in it

• Java Programming: Program Design Including Data Structures 16

Insertion The following statements insert the node in the

The sequence of statements to insert the node is very important

• Java Programming: Program Design Including Data Structures 17

Insertion (continued)

Figure 16-9 List after the statement newNode.link = p.link; executes

Figure 16-10 List after the statement p.link = newNode; executes

• Java Programming: Program Design Including Data Structures 18

Deletion

Consider the following linked list

You want to delete node with info 34 Figure 16-15 Node to be deleted is with info 34

• Java Programming: Program Design Including Data Structures 19

Deletion (continued) The following statement removes the nodes from the

Figure 16-16 List after the statement p.link = p.link.link; executes

• Java Programming: Program Design Including Data Structures 20

Deletion (continued) Previous statement removed the node

However, the memory may still be occupied by this node

Systems automatic garbage collector reclaims memory occupied by unreferenced nodes Use System.gc(); to run the garbage collector

• Java Programming: Program Design Including Data Structures 21

Building a Linked List You can build a list in two ways: forward or

backward Forward manner

A new node is always inserted at the end of the linked list

Backward manner A new node is always inserted at the beginning of the

• Java Programming: Program Design Including Data Structures 22

Building a Linked List Forward You need three reference variables

One to point to the front of the list Cannot be moved

One to point to the last node of the list One to create the new node

Next two slides show the code for creating a linked list forward

• Java Programming: Program Design Including Data Structures 23

Building a Linked List Forward (continued)

Node buildListForward() { Node first, newNode, last; int num; System.out.println(Enter integers ending with -999:); num = console.nextInt(); first = null; while (num != -999) { newNode = new Node(); newNode.info = num; newNode.link = null;

• Java Programming: Program Design Including Data Structures 24

Building a Linked List Forward (continued)

if (first == null) { first = newNode; last = newNode; } else { last.link = newNode; last = newNode; } num = console.nextInt(); }//end while return first; }//end buildListForward

• Java Programming: Program Design Including Data Structures 25

Building a Linked List Backward You only need two reference variables

One to point to the front of the list Changes each time a new node is inserted

One to create the new node Next slide shows the code for creating a linked list

backward

• Java Programming: Program Design Including Data Structures 26

Building a Linked List Backward (continued)

Node buildListBackward() { Node first, newNode; int num; System.out.println(Enter integers ending with -999:); num = console.nextInt(); first = null; while (num != -999) { newNode = new Node(); //create a node newNode.info = num; //store the data in newNode newNode.link = first; //put newNode at the beginning of the list first = newNode; //update the head of the list, num = console.nextInt(); //get the next number } return first; }//end buildListBackward

• Exercise

Write code to take in an array of ints and returns the head reference to a linked list of the ints

Java Programming: Program Design Including Data Structures 27

public Node createLinkedList(int[] a) {

}

• Write code to take in an array of ints and returns the head reference to a linked list of the ints

Java Programming: Program Design Including Data Structures 28

for (int i = a.length-2; i >=0; i--) { Node n = new Node(); n.info = a[i]; n.link = head.link; head = n; } return head; }

• Chris Kiekintveld CS 2401 (Fall 2010)

Elementary Data Structures and Algorithms

• Abstract Data Types (ADT)

A set of data A set of operations that can be done on the data

In Java, implemented using interfaces Methods are abstract Cannot create and instance of an ADT Need a concrete implementation Can be multiple implementations!

Java Programming: Program Design Including Data Structures 30

• Example: Lists

A list is an ordered sequence of elements of a single type of data

There are multiple ways to implement lists Array-Based lists (Vectors) Reference-Based lists (Linked Lists)

Java Programming: Program Design Including Data Structures 31

• Using an ADT

Java Programming: Program Design Including Data Structures 32

public int sum(List myList){ int tempSum = myList.get(0); for (int i=1; i

• To use a Linked List Instead

Java Programming: Program Design Including Data Structures 33

public int sum(List myList){ int tempSum = myList.get(0); for (int i=1; i

• Java Programming: Program Design Including Data Structures 34

An iterator is an object that produces each element of a collection one element at a time

An iterator has at least two methods: hasNext and next

hasNext Determines whether there is a next element in the

collection next

Gives access to the next element in the list

• Iterators in Java: Typical Example

List tmp = new Vector(); tmp.add(7); tmp.add(4);

Iterator itr = tmp.iterator(); while(itr.hasNext()) { int num = itr.next(); System.out.println(num); }

Java Programming: Program Design Including Data Structures 35

• Java Programming: Program Design Including Data Structures 36

Linked list in which every node has a next pointer and a back pointer

A doubly linked list can be traversed in either direction

Figure 16-48 Doubly linked list

• Java Programming: Program Design Including Data Structures 37

Doubly Linked List Nodes

public class DoublyLinkedListNode implements Cloneable { T info; DoublyLinkedListNode next; DoublyLinkedListNode back;

//place constructors and methods here }

• Java Programming: Program Design Including Data Structures 38

reversePrint List Doubly Linked lists make certain things easier

public void reversePrint() { DoublyLinkedListNode current; //reference variable to //traverse the list current = last; //set current to point to the last node while (current != null) { System.out.print(current.info + ); current = current.back; } }

• Java Programming: Program Design Including Data Structures 39

A linked list in which the last node points to the first node

It is convenient to make first point to the last node

Figure 16-56 Circular linked list with more than one node

• Exercise Write a method swap(List myList, i, j) that

interchanges the elements in positions i and j

Java Programming: Program Design Including Data Structures 40

public void swap(List myList,int i, int j){ int itemp = myList.get(i); int jtemp = myList.get(j);

}

What happens if we first remove both elements, and then add both?

• Exercise Write a recursive method to determine whether a

linked list is sorted in descending order or not (return a boolean)

Java Programming: Program Design Including Data Structures 41

boolean isSorted(Node A){ if (A == null | a.link == null) { return true;

} if (a.info > a.link.info) { return false;

} return isSorted(A.link); }