Lecture Programming in C++ - Chapter 16: Data structures and recursion. On completion of this chapter students will know how to: Create a linked list, create a stack, create a queue, create a binary tree, identify recursive functions.
Chapter 16 – Data Structures and Recursion Data Structures Builtin – Array – struct User developed – – – – linked list stack queue tree Lesson 16.1 Programmerdefined Linked List Class Data members (could be different types) stored in (usually) contiguous block of memory – One of the data members is a pointer variable Address stored points to the next object Data member that has address creates link between objects Each object referred to as a node Lesson 16.1 Linked List Representation Fact that address link Objects in points to next object Pointer variable value linked list Head node Object 2 Object 3 Object 4 Lesson 16.1 Actions on Linked List Must go node to node from head node Can delete node by making address that points to one to be deleted to next object Can insert node by changing address stored in pointer variable for node preceding location of insertion Can move node from one location to another Must keep track of current node and head node Lesson 16.1 Linked List Classes Use two classes to create linked list – Node class Holds only the data All data members public because no function members – Second used to manipulate nodes One variable holds address of first object in list Another variable holds current node address Lesson 16.1 Node Class General form: Class name class Node { public: Data types type member1; Identifiers representing (not necessarily type member2; Name for storing node data all the same) … address of next Node* next_node; node in list }; Lesson 16.1 Second Class Used to manipulate the nodes Data only pointer variables used to hold addresses Lesson 16.1 Address of node being manipulated Address of first object class Llist { private: Node* head; Node* current; public: void make_list ( ); void show_list ( ); }; Stack Data structure created using linked list model With stack can perform only two fundamental operations – Push Insert node immediately after the head – Pop Retrieve and delete node immediately after head Only work with nodes at top Lesson 16.2 Stack Classes Two classes create stack – One class holds only data Same form as linked list one member must be pointer variable – Second class used to manipulate nodes Data only pointer variables used to hold addresses of nodes Nodes of interest for stack are head and tail Function members initialize, push and pop items Lesson 16.2 Stack Class class Stack Address of head node { and last node private: Node* head; Node* tail; public: Stack ( ); void push (int); int pop ( ); }; Lesson 16.2 Stack Classes Create empty stack by initializing a head and tail node – Allow finding top and bottom of stack Should not pop from an empty stack LIFO – Last In First Out Last node pushed is first node popped off Lesson 16.2 Queue Class Can create with linked list form – Must have a head and tail node FIFO – First node inserted into queue is first node removed Nodes are inserted at tail of queue and removed from head of queue Lesson 16.3 Queue Class class Queue { Class Node private: { Node* head; public: Node* tail; type member; Node* next_node; public: Queue ( ); }; void insert (int); int remov ( ); }; Lesson 16.3 Types of Queues Dequeue "doubleended queue" – Nodes can be inserted at either end and removed from either end Output restricted dequeue – Insertion allowed at both ends but removal allowed at only one end Input restricted dequeue – Removal allowed at both ends, insertion allowed at only one end Priority queue – Priority for each node – highest priority processed first Lesson 16.3 Binary Tree Tree is particular type of graph – Binary tree is particular type of tree Graph is data structure that includes nodes – each node can have more than one pointer Lesson 16.4 Linked List Graph Graph Terminology Nodes can also be called vertices or points Connections between nodes called edges or arcs Two nodes considered adjacent of neighbors if edge connects them Path between one node and another indicated by list of connect nodes between two Simple path is path with no repeated nodes Lesson 16.4 Graphs Weighted graph – Assign length or cost of each edge Tree – graph with characteristic that there is only one path between any two nodes – Rooted tree Tree with one node specified to be root Root traditionally shown at top of diagram – Binary tree Tree in which no node has more than two children Lesson 16.4 Tree Class Similar to linked list and stack classes Two classes – One class holds content of nodes – Second class manipulates the nodes Lesson 16.4 class Tree_node { public: type member; Tree_node* left_child; Tree_node* right_child; }; Recursion Within function body there is call to function with identical name and signature Basic action which is repeated until it reaches the final iteration of the basic action Lesson 16.5 Summary Learned how to: Create a linked list Create a stack Create a queue Create a binary tree Identify recursive functions ... void push (int); int pop ( ); }; Lesson 16.2 Stack Classes Create empty stack by initializing a head and tail node – Allow finding top and bottom of stack Should not pop from an empty stack... Actions on Linked List Must go node to node from head node Can delete node by making address that points to one to be deleted to next object Can insert node by changing address stored in pointer variable for node preceding location of .. .Data Structures Built in – Array – struct User developed – – – – linked list stack queue tree Lesson 16.1 Programmerdefined Linked List Class Data members (could be different types)