CS136 Fall 2012 - Tutorial 5 CS136 Tutors: - - PowerPoint PPT Presentation

cs136 fall 2012 tutorial 5
SMART_READER_LITE
LIVE PREVIEW

CS136 Fall 2012 - Tutorial 5 CS136 Tutors: - - PowerPoint PPT Presentation

CS136 Fall 2012 - Tutorial 5 CS136 Tutors: cs136@student.cs.uwaterloo.ca October 12, 2012 CS136 Tutors: cs136@student.cs.uwaterloo.ca CS136 Fall 2012 - Tutorial 5 Structures and Pointers in C struct node { int key; struct node* next; };


slide-1
SLIDE 1

CS136 Fall 2012 - Tutorial 5

CS136 Tutors: cs136@student.cs.uwaterloo.ca October 12, 2012

CS136 Tutors: cs136@student.cs.uwaterloo.ca CS136 Fall 2012 - Tutorial 5

slide-2
SLIDE 2

Structures and Pointers in C

struct node { int key; struct node* next; };

CS136 Tutors: cs136@student.cs.uwaterloo.ca CS136 Fall 2012 - Tutorial 5

slide-3
SLIDE 3

Structures and Pointers in C

int main() { struct node *x, y, *z; x = malloc(sizeof(struct node)); z = malloc(sizeof(struct node)); x->key = 15; x->next = z; y.key = 7; (&y)->next = malloc(sizeof(struct node)); (*z).key = 67; z->next = y.next; z->next->key = 12; (*(z->next)).next = y.next; x->next = &y; y.next = &y; }

CS136 Tutors: cs136@student.cs.uwaterloo.ca CS136 Fall 2012 - Tutorial 5

slide-4
SLIDE 4

Circular Lists

A circular list contains a chain of nodes such that each node points to a next node. There is no beginning and no end to a circular list. In other words, by following the next pointer from a node, you will eventually come back to this node. A circular list with only one node is a node whose next pointer points to itself. You may assume that no two nodes contain the same value. We will use the following definition of a node: struct node { int value; struct node* next; };

CS136 Tutors: cs136@student.cs.uwaterloo.ca CS136 Fall 2012 - Tutorial 5

slide-5
SLIDE 5

Circular Lists

Your goal is to implement the following C functions: struct node* insertNode(int val, struct node* n); struct node* findNode(int val, struct node* n); void printList(struct node* n); void freeCircularList(struct node* n);

CS136 Tutors: cs136@student.cs.uwaterloo.ca CS136 Fall 2012 - Tutorial 5

slide-6
SLIDE 6

Circular Lists

The insertNode function creates a new node with the given value and inserts it right after node n in the circular list. After the insertion, n should point to the newly created node. The function should then return a pointer pointing to the newly inserted node. The findNode function consumes a node in a circular list and a

  • value. If the value exists, then the function returns a pointer to

the node containing that value; otherwise, the function returns the NULL pointer.

CS136 Tutors: cs136@student.cs.uwaterloo.ca CS136 Fall 2012 - Tutorial 5

slide-7
SLIDE 7

Circular Lists

The printList function consumes a node in a circular list, and prints the value of each node, separated by a space. After all the values are printed, print a newline. If the circular list is empty, then simply print a newline. The freeCircularList function frees the memory allocated for all the nodes in the circular list.

CS136 Tutors: cs136@student.cs.uwaterloo.ca CS136 Fall 2012 - Tutorial 5

slide-8
SLIDE 8

The Josephus Ring

A classic problem that can be represented with a circular linked list is the Josephus Ring, first documented by the Roman historian Josephus around 100 A.D (See wikipedia for Josephuss rather grim version of the problem).

CS136 Tutors: cs136@student.cs.uwaterloo.ca CS136 Fall 2012 - Tutorial 5

slide-9
SLIDE 9

The Josephus Ring

In our version of the problem, we decide who wins a lottery in the following way:

1 n people will stand in a circle. 2 Starting from the leader, the k th person is removed from

the circle, and the circle shrinks.

3 Counting from the new k th person, we now count k people

ahead, and remove that person.

4 Repeat step 3 until only one person is left. 5 The remaining person is the winner.

CS136 Tutors: cs136@student.cs.uwaterloo.ca CS136 Fall 2012 - Tutorial 5

slide-10
SLIDE 10

The Josephus Ring

Using the circular linked list from section 2, write a function int solveJosephusRing(int n, int k) which returns the position of the winner for a Josephus Ring of size n with steps of size k.

CS136 Tutors: cs136@student.cs.uwaterloo.ca CS136 Fall 2012 - Tutorial 5