90 Views

Download Presentation
## Extension of linked list

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -

**Extension of linked list**Zhen Jiang West Chester University zjiang@wcupa.edu**Outline**• Double Cyclic Linked List • Queue & Stack • Binary Tree • Expression Tree • Networks**(Single) Linked list**node NULL**Double Cyclic Linked List**node NULL**Queue**node Delete an item from the tail NULL Insert a new item at the head**Stack**node NULL Insert a new item at the head Delete an item from the head**Implementation of stack with template**• http://www.cs.wcupa.edu/~zjiang/csc513_template.ppt**Use of Stack**• Project 5 • Reading information via file • http://www.cs.wcupa.edu/~zjiang/530_proj5_file.pdf • Three stacks, one for each {}, (), and []. • Left => push/insert • Right => pop/delete the closest left symbol • Evaluation of (postfix) expression**(5 + 4) * 3**• 5 * (4 + 3) • 5 * 4 + 3 • 5 + (4 + 3) • 5 4 + 3 * • 5 4 3 + * • 5 4 * 3 + • 5 4 3 * +**Read the formula from left to right**• Number => push • Binary operator => 2 pops • Right number popped first • Then, left number popped. • Calculate result = <second> op <first> • Push (result) • Until expression reading finishes and only one (final) result is left in stack**Disorder of the link connection**node NULL**Tree**• Definition • Each node u has n(u) children • Considering the parent-child relationship is undirected, there is no cycle in a tree • There is only one node called the root in the entire tree. It has children only but no parent.**Binary Tree**• Definition • Definition of tree (3) • For each node u, n(u)<3 • L<S<R • < is a relation between any two nodes in the tree**Constructor**• Assume each node has a number value so that we have the relation < • Given a sequence: n1, n2, n3, …, ni, … • n1 -> set root unit (node) • ni -> call insertion(node, ni)**Insertion(p, n)**• If (p->v < n) • If p->R not empty • Insertion (p->R, n) • else • Set p->R • If (p->v > n) • Similar to the case (p->v < n)**Travel (print out all node values)**• Infix travel, L->S->R • Postfix travel, L->R->S • Prefix travel, S->L->R**Infix travel**• If node is not empty, Infix_print (node); • Infix_print (p) • If (p->L) infix_print(p->L) • Cout << p->v • If(p->R) infix_print (p->R)**Search**• If node is not empty, Search (node, n); • Search (p, n) • If (p->v == n) return true • If (p->v < n) return Search (p->R, n) • If (p->v > n) return Search (p->L, n) • Terminating condition: if (!p) return false**Deletion**• Delete the root node • If node is empty • If node->L (or node->R) is empty • tmp = node->R (or node->L) • Delete node • node = tmp**If neither node->L nor node->R is empty**• If node->L->R is empty • node -> v = node->L->v • tmp = node->L->L • Delete node->L • node->L = tmp • Else • tmp = node->L • While (tmp->R->R) tmp = tmp->R • node->v = tmp->R->V • tmp2 = tmp->R->L • Delete tmp->R • tmp->R = tmp2**See if you can find a certain value in the tree and delete**it! • Delete (n) • If (node->v == n) delete node; • If (node->v < n) • deletion (node, node-R, n, 1) • If (node->v > n) • deletion (node, node-L, n, 0)**Deletion (parent, start, value, flag)**• If start is empty // not found, done! • If start->v < value • If start->v > value • Else //start->v == value • If both start->L and start->R are empty • Delete start • If (flag)Parent ->R = NULL • Else Parent -> L = NULL • If start->L (or start->R) is empty**Deletion (parent, start, value, flag)**• Else //start->v == value • If start->L (or start->R) is empty • If (flag) Parent-R = Start->R (or start->L) • Else Parent->L = Start->R • Delete start • If neither start->L nor start->R is empty**If start->L->R is empty**• start -> v = start->L->v • tmp = start->L->L • Delete start->L • start->L = tmp • Else • tmp = start->L • While (tmp->R->R) tmp = tmp->R • start->v = tmp->R->V • tmp2 = tmp->R->L • Delete tmp->R • tmp->R = tmp2**Expression Tree**• Definition • Definition of binary tree (5) • All leaves are numbers, and all intermediate nodes are operators • To simplify the discussion in this class, we use binary operators only.**Evaluation**• If node is not empty, R_E(node); • R_E(p) • If p->v is not digit • Lvalue = R_E(p->L); • Rvalue = R_E(p->R); • Return Lvalue <p->v> Rvalue; • Else • Return p->v**Print**• Postfix • Construction • From infix format • http://www.cs.wcupa.edu/~zjiang/csc530_expressionTree.htm**Network**• Graph table • http://www.cs.wcupa.edu/~zjiang/csc530_graph_table.pdf • Depth first search • http://www.cs.wcupa.edu/~zjiang/csc530_depth.pdf • Width first search • http://www.cs.wcupa.edu/zjiang/csc530_width.pdf • Shortest path construction • http://www.cs.wcupa.edu/~zjiang/csc530_shortestpath.pdf**Spanning (travel)**• Project 7