1 Chapter 7 The Stack In this chapter we examine what is arguably the most important abstract data type in computer science, the stack. We will see that the stack ADT and its implementation are very simple. The stack's simplicity is misleading, however, for it has a variety of sophisticated applications.
2 68 Chapter 7 The Stack 7.1 Our Current Model Fig Our current software model, which shows class Stack and its association with class LinearNode
3 7.3 Stack Implementation The Stack ADT The stack is so named because it behaves like a deck of playing cards: the current card of interest is the top card, and no other card may be examined or removed. In other words, the stack is a last-in-first-out (LIFO) collection. The stack ADT appears below. stack: a linear collection of elements that can be accessed at only one end; the current element of interest is called the top element operations: clear() - Make the collection empty. isempty() - Is the collection empty? pop() - Remove the top element. push(element) - Make the given element the top element. size() - How many elements are in the collection? top() - Get the top element of the collection. 7.3 Stack Implementation The stack ADT can easily be implemented as an array container in which the top element is either stored at index 0 or at index n - 1, where n is the size of the collection. If the top element is stored at index 0, then the push and pop operations have linear running times, for the rest of the collection's elements must be shifted to make room for the new top or to remove the old one. If the top element is stored at index n - 1, then push and pop are constant-time operations, and so the array-based stack is customarily implemented in this way. But the fundamental characteristic of the array is efficient random access. The vector is a random-access collection, and so it makes sense to have implemented the vector as an array container, as we did in Chapters 3 and 4. But the stack is not a random-access collection. The heap is also not a random-access collection, but we saw in the last chapter that the complete binary tree lends itself to an array implementation. Might the same be said of the stack? In other words, do we gain anything by implementing the stack ADT using an array? It is hard to see what a stack implementation might gain from the random access of an array, but it is easy to see what the implementation would lose: an array container often wastes space in the form of unused array elements. Because the stack is not random access, because an array-based stack implementation cannot exploit the array's random access, and because an array-based implementation wastes
4 70 Chapter 7 The Stack space, we will implement the stack ADT using an alternative structure, the linked list. linked list: a linear collection of nodes in which each node has, at a minimum, a data portion and a link portion; a node's link portion is a pointer or reference to the next node in the list, unless there is no next node, in which case the link portion is empty Linked Lists The figure below shows a linked list containing the integer values 3, 7, 25, 42, and 12. The absence of an arrow pointing out of the last node indicates an empty link, i.e., the end of the list. The first node of a linked list is kept track of using a reference or pointer called head, and sometimes the last node is kept track of using a reference or pointer called tail. Fig An example linked list The nodes of a linked list are not stored in contiguous blocks of memory, hence the links. Only the memory addresses of the first and last nodes are stored outside the list; the memory address of any internal node is stored in another node, namely the predecessor. This means that a given internal node can be accessed only by navigating to that node by way of the links, starting with head. Thus a linked list is a sequential-access structure, like an audio or video cassette Class LinearNode and Some Elementary Linked-List Operations Let us now examine a few elementary linked-list operations, some of which we will use in our stack implementation. All of our examples will make use of the LinearNode class shown below. Observe that both the data and next fields of a LinearNode are declared public. This may appear to violate a cardinal rule of object-oriented design and development, but it does not. We will never use a linked list outside a container.
5 7.3 Stack Implementation 71 The container will declare head and tail as protected, and access to the list will be restricted to the methods of the container. public class LinearNode public Object data; public LinearNode next; // The following constructors are obviously unnecessary, // considering that 'data' and 'next' are public. These // constructors are provided for the sake of convenience. public LinearNode(Object dat) data = dat; } public LinearNode(Object dat, LinearNode nxt) data = dat; } } next = nxt; Creating an Empty Linked List Creating an empty linked list is easy. Simply declare a head reference and a tail reference and set them to null. LinearNode head = null, tail = null; Inserting into an Empty Linked List To insert an element into an empty linked list, we must instantiate a node, initialize its data field, place null in its next field, and assign its memory address to head and tail. The first LinearNode constructor will allow us to do all this in one statement. // Create a one-node linked list to store the integer 0. head = tail = new LinearNode(new Integer(0)); The above code creates the linked list shown below.
6 72 Chapter 7 The Stack Inserting at the Head or the Tail of a Nonempty Linked List The code below inserts a new node containing the integer value -1 at the head of the linked list shown above. The second LinearNode constructor allows us to do the insertion with a single statement. // Because the assignment to 'head' is carried out after the new // node has been created, the value of 'head' that is passed to // the constructor is the memory address of the old head node, the // node containing 0. head = new LinearNode(new Integer(-1), head); // Here is a three-step alternative. // Instantiate a new node with an empty link. LinearNode temp = new LinearNode(new Integer(-1)); temp.next = head; head = temp; // Link the new node to the head node. // Make 'head' point at the new node. The new list is shown below. Insertion at the tail can also be accomplished with a single statement. The code below inserts a node containing 1 at the tail of the above list.
7 7.3 Stack Implementation 73 tail = tail.next = new LinearNode(new Integer(1)); // Here is a two-step alternative. tail.next = new LinearNode(new Integer(1)); tail = tail.next; // Move 'tail' ahead to the new node. The resulting list appears below. Removing the Head Node of a Linked List Removing the head node of a linked list amounts to moving head forward to the second node, provided that a second node exists. The special case of a one-node list requires that tail be updated as well. The code to remove the head node of the above list is shown below. /* Move 'head' forward. If the list had two or more nodes, then 'head' now points to the second node. If the list had only one node, then 'head' is now equal to null. In either case, no reference to the old head node remains, and so that node can be reclaimed by the garbage collector. */ head = head.next; // If 'head' is now equal to null, then the list had only one // node. The result of the removal should be an empty list, and so // 'tail' must be set to null. if (head == null) tail = null; The figure below shows the list that results from removing the head node of the above list.
8 74 Chapter 7 The Stack A Linked-List Stack Implementation We now implement the stack ADT as a linked-list container. Class Stack inherits from class Container and uses the LinearNode class defined above. A Stack's top element is stored in the head node. public class Stack extends Container protected LinearNode head; // We need only a head reference. // There is no use for a tail // reference because the top // element is at the head of the // list. /* Method clear() is inherited from Container, but no linked list is present at that level of abstraction. Thus class Stack overrides the superclass method so as to make the linked list ready for garbage collection. The list is prepared for garbage collection by setting 'head' to null. After 'head' has been set to null, the linked list can no longer be accessed. The unreachable list is recognized as such by the garbage collector and is reclaimed. */ public void clear() super.clear(); // Call Container.clear. head = null; // Prepare the list for garbage } // collection. /* precondition: If the collection is empty this method has nothing to do, in which case it returns null. postcondition: The top element has been removed from the collection and has been returned. */ public Object pop() if (isempty()) return null; Object element = head.data; // Save the top element. head = head.next; // Move 'head' forward. numitems--; return element; // Return the top element. } /* precondition: N/A postcondition: The given element is the new top element. */ public void push(object element) if (isempty()) head = new LinearNode(element); else head = new LinearNode(element, head); numitems++; }
9 7.4 Stack Applications 75 /* precondition: If the collection is empty it has no top element, in which case this method returns null. postcondition: The top element has been returned. */ } public Object top() if (isempty()) return null; return head.data; } 7.4 Stack Applications The stack ADT has many applications, including argument passing, pushdown automata and Turing machines, and expression evaluation. Argument passing is the subject of the next chapter, and the theory of computation is beyond the scope of this book. Thus we turn to a discussion of expression evaluation in the context of constant folding, a type of optimization that is done by programming-language compilers Constant Folding Consider the following Java statement. // Compute the volume of a sphere of radius 2. double volume = 4.0 / 3 * Math.PI * 2 * 2 * 2; A non-optimizing Java compiler might generate byte code for this statement that is roughly equivalent to the following pseudocode. fld 3.0 // Load 3.0. fld 4.0 // Load 4.0. fdiv // Compute 4.0 / 3.0. fld Math.PI // Load Math.PI. fmul // Compute 4.0 / 3.0 * Math.PI. fld 2.0 // Load 2.0. fmul // Compute 4.0 / 3.0 * Math.PI * 2.0. fld 2.0 // Load 2.0. fmul // Compute 4.0 / 3.0 * Math.PI * 2.0 * 2.0. fld 2.0 // Load 2.0. fmul // Compute 4.0 / 3.0 * Math.PI * 2.0 * 2.0 * 2.0. fstp volume // Store the result in 'volume'. The preceding byte code is far from optimal. The expression to be evaluated consists only of constants, the values of which are obviously
10 76 Chapter 7 The Stack available to the Java compiler. If the Java compiler were to evaluate the expression, rather than generating byte code to compute the value at run time, the resulting program would see a considerable decrease in its execution time, for the two instructions shown below will surely execute much faster than the previous 12 instructions. fld 33.5 fstp volume The compile-time evaluation of constant expressions is called constant folding. Constant folding can be accomplished using the stack ADT Using a Stack to Evaluate an Arithmetic Expression Our approach to expression evaluation will have two steps: 1. Use a stack to convert an infix expression to a postfix expression. 2. Use a stack to evaluate the postfix expression that resulted from step 1. In an infix expression, a binary operator appears between its two operands. In a postfix expression, a binary operator appears after its two operands. Below are some examples of infix expressions along with their corresponding postfix expressions. The ^ symbol denotes exponentiation. Table 7.1. Some example infix arithmetic expressions and their postfix equivalents Infix Expression Postfix Expression (3 + 6) % % ((3 + 6) % 7) ^ % 5 ^ ((3 + 6) % 7) ^ % 5 ^ % 7 ^ ^ % Notice that the order of an infix expression's operands is preserved in its postfix expression. The order of the operators may change, however, depending on their precedence. Postfix expressions do not require parentheses because the precedence of an operator in a postfix expression is implied by the ordering of the expression's operands and operators.
11 7.4 Stack Applications 77 Infix-to-Postfix Conversion The infix-to-postfix conversion algorithm is specified below. CONVERTING AN INFIX EXPRESSION TO A POSTFIX EXPRESSION 1. Initialize a stack of characters to hold the operation symbols and parentheses. 2. do if (the next input is a left parenthesis) Read the parenthesis and push it onto the stack. else if (the next input is a number or other operand) Read the operand and write it to the output. else if (the next input is an operation symbol) Print the top operation and pop it; keep doing this until one of the following occurs. (1) The stack becomes empty. (2) The stack's top item is a left parenthesis. (3) The stack's top item is an operation with lower precedence than the next input. When one of these situations occurs, stop popping, read the next input, and push the input onto the stack. } else Read and discard the next input, a right parenthesis. Print the top operation and pop it; keep printing and popping until the next symbol on the stack is a left parenthesis. (If no left parenthesis is found, print an error message announcing unbalanced parentheses and halt.) Finally, pop the left parenthesis. } while (there is more input to read); 3. Print and pop any operations that remain on the stack. (There should be no left parentheses on the stack; otherwise, the input expression did not have balanced parentheses.) Let us apply the algorithm to the infix expression ((3 + 6) % 7) ^ 5-1. The initial states of our input, our stack, and our output are shown below.
12 78 Chapter 7 The Stack The first character of input is a left parenthesis. According to the algorithm, the left parenthesis should be pushed onto the stack. The pointer into the input is then moved forward, leaving the system in the state shown below. The next character of input is another left parenthesis. The parenthesis is pushed onto the stack and the input pointer is again moved forward. The following diagram shows the system's new state.
13 7.4 Stack Applications 79 The next input character is an operand. Any operand is immediately written to the output. Both the input and output pointers are then moved forward. The algorithm now encounters an operator. There is no operator on top of the stack, and so the input operator, +, is immediately pushed onto the stack and the input pointer is moved forward.
14 80 Chapter 7 The Stack The next input, an operand, is written to the output string. The right parenthesis is now read and discarded. Then the stack's top operator is popped and printed, after which the top left parenthesis is popped and discarded.
15 7.4 Stack Applications 81 The next character of input is another operator. There are no operators on top of the stack, and so the % operator is immediately pushed. The next input, an operator, gets written to the postfix string.
16 82 Chapter 7 The Stack The right parenthesis is now read and discarded, after which the stack's top operator is popped and printed to the output string. The right parenthesis's matching left parenthesis is then popped and discarded. The next input character is an operator and the stack is empty. Consequently, the operator gets pushed.
17 7.4 Stack Applications 83 The next input, 5, is an operand. It gets written to the postfix string. The next input is the subtraction operator. The stack's top symbol is an operator with higher precedence, and so the ^ operator must be popped and written to the postfix string before the - operator gets pushed.
18 84 Chapter 7 The Stack The remaining input, 1, is an operand. The 1 is written to the output. Having reached the end of the input string, the algorithm's do-while loop terminates. According to step 3, any operators that remain on the stack should be popped and written to the output. Thus the - operator is popped and written. The stack is now empty, which indicates that the infix expression had balanced parentheses.
19 Exercises 85 Postfix Evaluation The postfix evaluation algorithm is specified below. Apply it to the postfix expression above. EVALUATING A POSTFIX EXPRESSION 1. Initialize a stack to hold the operands. 2. do if (the next input is a number) Read the next input and push it onto the stack. else Read the next input, an operation symbol. Get the top two numbers off of the stack. Apply the operation to the two numbers, making sure to use the first number off as the right operand and the second number off as the left operand. Push the result onto the stack. } while (there is more input to read); 3. The stack now contains one number, the value of the expression.
20 86 Chapter 7 The Stack Exercises 1. Add attributes and operations to the class diagram shown at the beginning of the chapter. 2. Perform a space analysis of the array and the linked list. Hint: Assume that Java is the target programming language and that a Java reference occupies k bytes. For a collection of size n, how many array elements must go unused for an array's space requirement to exceed that of a linked list? 3. Design and code a program to identify palindromes. 4. Design and code a program that prompts its user for an infix expression, reads the expression, converts the expression to postfix, evaluates the postfix expression, and displays the result. Your program should handle only nonnegative single-digit integer operands and the integer operators +, -, *, /, %, and ^. Be sure not to divide by zero.
Data Structures and Algorithms V22.0102 Otávio Braga We use a stack When an operand is read, output it When an operator is read Pop until the top of the stack has an element of lower precedence Then push
Appendix E Glossary of Object Oriented Terms abstract class: A class primarily intended to define an instance, but can not be instantiated without additional methods. abstract data type: An abstraction
DATA STRUCTURES USING C QUESTION BANK UNIT I 1. Define data. 2. Define Entity. 3. Define information. 4. Define Array. 5. Define data structure. 6. Give any two applications of data structures. 7. Give
Introduction to Stacks What is a Stack Stack implementation using array. Stack implementation using linked list. Applications of Stack. What is a Stack? Stack is a data structure in which data is added
Stacks Linear data structures Collection of components that can be arranged as a straight line Data structure grows or shrinks as we add or remove objects ADTs provide an abstract layer for various operations
This lecture Abstract data types Stacks Queues ADTs, Stacks, Queues 1 Abstract Data Types (ADTs) An abstract data type (ADT) is an abstraction of a data structure An ADT specifies: Data stored Operations
=============================================================================================================================== DATA STRUCTURE PSEUDO-CODE EXAMPLES (c) Mubashir N. Mir - www.mubashirnabi.com
The Essentials of Computer Organization and Architecture Linda Null and Julia Lobur Jones and Bartlett Publishers, 2003 Chapter 5 Instructor's Manual Chapter Objectives Chapter 5, A Closer Look at Instruction
CHAPTER 5 The Tree Data Model There are many situations in which information has a hierarchical or nested structure like that found in family trees or organization charts. The abstraction that models hierarchical
Outline Computer Science 1 Stacks Mike Jacobson Department of Computer Science University of Calgary Lecture #12 1 2 Applications Array-Based Linked List-Based 4 Additional Information Mike Jacobson (University
1. The memory address of the first element of an array is called A. floor address B. foundation addressc. first address D. base address 2. The memory address of fifth element of an array can be calculated
This sub chapter discusses another architecture, that of the JVM (Java Virtual Machine). In general, a VM (Virtual Machine) is a hypothetical machine (implemented in either hardware or software) that directly
CSE373: Data Structures and Algorithms Lecture 1: Introduction; ADTs; Stacks/Queues Linda Shapiro Registration We have 180 students registered and others who want to get in. If you re thinking of dropping
Moving from CS 61A Scheme to CS 61B Java Introduction Java is an object-oriented language. This document describes some of the differences between object-oriented programming in Scheme (which we hope you
Algorithms and Data Structures Part 2: Data Structures PD Dr. rer. nat. habil. Ralf-Peter Mundani Computation in Engineering (CiE) Summer Term 2016 Overview general linked lists stacks queues trees 2 2
Definition Course: Programming II - Abstract Data Types The ADT Stack The ADT Stack is a linear sequence of an arbitrary number of items, together with access procedures. The access procedures permit insertions
Data Structures Using C++ 2E Chapter 5 Linked Lists Doubly Linked Lists Traversed in either direction Typical operations Initialize the list Destroy the list Determine if list empty Search list for a given
CS104: Data Structures and Object-Oriented Design (Fall 2013) October 24, 2013: Priority Queues Scribes: CS 104 Teaching Team Lecture Summary In this lecture, we learned about the ADT Priority Queue. A
Java Application Developer Certificate Program Competencies After completing the following units, you will be able to: Basic Programming Logic Explain the steps involved in the program development cycle
STACKS,QUEUES, AND LINKED LISTS Stacks Queues Linked Lists Double-Ended Queues Case Study: A Stock Analysis Applet 1 Stacks Astack is a container of objects that are inserted and removed according to the
14-1 Java Au Naturel by William C. Jones 14-1 14 Stacks, Queues, And Linked Lists Overview This chapter requires that you have a solid understanding of arrays (Chapter Seven) and have studied Exceptions
Sequential Data Structures In this lecture we introduce the basic data structures for storing sequences of objects. These data structures are based on arrays and linked lists, which you met in first year
1 The Java Virtual Machine About the Spec Format This document describes the Java virtual machine and the instruction set. In this introduction, each component of the machine is briefly described. This
Java Programming Binnur Kurt email@example.com Istanbul Technical University Computer Engineering Department Java Programming 1 Version 0.0.4 About the Lecturer BSc İTÜ, Computer Engineering Department,
Data Structures 1 Common Data Structures Arrays (single and multiple dimensional) Linked Lists Stacks Queues Trees Graphs You should already be familiar with arrays, so they will not be discussed. Trees
Introduction to Data Structures Albert Gural October 28, 2011 1 Introduction When trying to convert from an algorithm to the actual code, one important aspect to consider is how to store and manipulate
PROBLEM SOLVING WITH SEVENTH EDITION WALTER SAVITCH UNIVERSITY OF CALIFORNIA, SAN DIEGO CONTRIBUTOR KENRICK MOCK UNIVERSITY OF ALASKA, ANCHORAGE PEARSON Addison Wesley Boston San Francisco New York London
Introduction to Programming System Design CSCI 455x (4 Units) Description This course covers programming in Java and C++. Topics include review of basic programming concepts such as control structures,
Algorithms and Abstract Data Types Informally, algorithm means is a well-defined computational procedure that takes some value, or set of values, as input and produces some other value, or set of values,
CS 111 Classes I 1 Software Organization View to this point: Data Objects and primitive types Primitive types operators (+, /,,*, %). int, float, double, char, boolean Memory location holds the data Objects
Chapter 2: Elements of Java Basic components of a Java program Primitive data types Arithmetic expressions Type casting. The String type (introduction) Basic I/O statements Importing packages. 1 Introduction
Linked Lists Linked Lists, Queues, and Stacks CSE 10: Introduction to C Programming Fall 200 Dynamic data structure Size is not fixed at compile time Each element of a linked list: holds a value points
Run-Time Data Structures Stack Allocation Static Structures For static structures, a fixed address is used throughout execution. This is the oldest and simplest memory organization. In current compilers,
Interpreters and virtual machines Michel Schinz 2007 03 23 Interpreters Interpreters Why interpreters? An interpreter is a program that executes another program, represented as some kind of data-structure.
Data Structures and Data Types Data types Set values. Set operations on those values. Some are built in to Java: int, double, char,... Most are not: Complex, Picture, Charge, Stack, Queue, Graph,... Data
COMPUTER SCIENCE AND ENGINEERING VI SEM CSE Principles of Compiler Design Unit-IV Question and answers UNIT IV CODE GENERATION 9 Issues in the design of code generator The target machine Runtime Storage
CS 2112 Spring 2014 Assignment 3 Data Structures and Web Filtering Due: March 4, 2014 11:59 PM Implementing spam blacklists and web filters requires matching candidate domain names and URLs very rapidly
Data Structures and Algorithms Stacks and Queues Chris Brooks Department of Computer Science University of San Francisco Department of Computer Science University of San Francisco p.1/23 6-0: Stacks and
System Software Prof. Dr. H. Mössenböck 1. Memory Management 2. Garbage Collection 3. Linkers and Loaders 4. Debuggers 5. Text Editors Marks obtained by end-term exam http://ssw.jku.at/misc/ssw/ 1. Memory
These slides are by Dr. Jaerock Kwon at. The original URL is http://kettering.jrkwon.com/sites/default/files/2011-2/ce-491/lecture/alecture-01.pdf so please use that instead of pointing to this local copy
ECE 551 C++ Programming, Data structures, and Algorithms Abstract Data Type: Stack Last In First Out (LIFO) 1 2 2 1 4 3 1 3 4 Stacks in Programming Worst line ever! 5 3 1 5 Stacks are not useful for waiting
Object Oriented Software Design Introduction to Java - II Giuseppe Lipari http://retis.sssup.it/~lipari Scuola Superiore Sant Anna Pisa October 28, 2010 G. Lipari (Scuola Superiore Sant Anna) Introduction
Java 6 'th edition Concepts INTERNATIONAL STUDENT VERSION CONTENTS PREFACE vii SPECIAL FEATURES xxviii chapter i INTRODUCTION 1 1.1 What Is Programming? 2 J.2 The Anatomy of a Computer 3 1.3 Translating
CS Data Structures and Algorithms Lecture Slides Wednesday, April 5, 2009 Glenn G. Chappell Department of Computer Science University of Alaska Fairbanks CHAPPELLG@member.ams.org 2005 2009 Glenn G. Chappell
PES Institute of Technology-BSC Faculty: Mrs. R.Bharathi CS35: Data Structures Using C QUESTION BANK UNIT I -BASIC CONCEPTS 1. What is an ADT? Briefly explain the categories that classify the functions
2008 AGI-Information Management Consultants May be used for personal purporses only or by libraries associated to dandelon.com network. Computing Concepts with Java Essentials 3rd Edition Cay Horstmann
CS 110B - Rule Storage Classes Page 18-1 Attributes are distinctive features of a variable. Data type, int or double for example, is an attribute. Storage class is another attribute. There are four storage
EECS 281: Data Structures and Algorithms The Foundation: Data Structures and Abstract Data Types Computer science is the science of abstraction. Abstract Data Type Abstraction of a data structure on that
Stacks Outline The Stack ADT Applications of Stacks Array-based implementation Growable array-based stack Stacks 2 Abstract Data Types (ADTs) An abstract data type (ADT) is an abstraction of a data structure
Data Structure and Algorithm I Midterm Examination 120 points Time: 9:10am-12:10pm (180 minutes), Friday, November 12, 2010 Problem 1. In each of the following question, please specify if the statement
Classes and Pointers: Some Peculiarities (cont d.) Assignment operator Built-in assignment operators for classes with pointer member variables may lead to shallow copying of data FIGURE 3-22 Objects objectone
Object Oriented Software Design Introduction to Java - II Giuseppe Lipari http://retis.sssup.it/~lipari Scuola Superiore Sant Anna Pisa September 14, 2011 G. Lipari (Scuola Superiore Sant Anna) Introduction
Data Structures Page 1 of 24 A.1. Arrays (Vectors) n-element vector start address + ielementsize 0 +1 +2 +3 +4... +n-1 start address continuous memory block static, if size is known at compile time dynamic,
Binary Search Trees 1 The general binary tree shown in the previous chapter is not terribly useful in practice. The chief use of binary trees is for providing rapid access to data (indexing, if you will)
Java the UML Way: Integrating Object-Oriented Design and Programming by Else Lervik and Vegard B. Havdal ISBN 0-470-84386-1 John Wiley & Sons, Ltd. Table of Contents Preface xi 1 Introduction 1 1.1 Preliminaries
University of Twente Department of Computer Science A simulation of the Java Virtual Machine using graph grammars Master of Science thesis M. R. Arends, November 2003 A simulation of the Java Virtual Machine
LINKED DATA STRUCTURES 1 Linked Lists A linked list is a structure in which objects refer to the same kind of object, and where: the objects, called nodes, are linked in a linear sequence. we keep a reference
Software Engineering Techniques Low level design issues for programming-in-the-large. Software Quality Design by contract Pre- and post conditions Class invariants Ten do Ten do nots Another type of summary
Texas University Interscholastic League Contest Event: Computer Science The contest challenges high school students to gain an understanding of the significance of computation as well as the details of
TECHNOLOGIES The C Programming Language course syllabus associate level Course description The course fully covers the basics of programming in the C programming language and demonstrates fundamental programming
Lesson Unit 1: INTRODUCTION TO COMPUTERS Computer History Create a timeline illustrating the most significant contributions to computing technology Describe the history and evolution of the computer Identify
COMP209 Object Oriented Programming Designing Classes 2 Mark Hall Programming by Contract (adapted from slides by Mark Utting) Preconditions Postconditions Class invariants Programming by Contract An agreement
FP 2005 1.1 3 Functional Programming WOLFRAM KAHL firstname.lastname@example.org Department of Computing and Software McMaster University FP 2005 1.2 4 What Kinds of Programming Languages are There? Imperative telling
Course Title: Software Development Unit: Customer Service Content Standard(s) and Depth of 1. Analyze customer software needs and system requirements to design an information technology-based project plan.
Persistent Binary Search Trees Datastructures, UvA. May 30, 2008 0440949, Andreas van Cranenburgh Abstract A persistent binary tree allows access to all previous versions of the tree. This paper presents
1 2 Introduction to Java Applications 2.2 First Program in Java: Printing a Line of Text 2 Application Executes when you use the java command to launch the Java Virtual Machine (JVM) Sample program Displays
Monitors, Java, Threads and Processes 185 An object-oriented view of shared memory A semaphore can be seen as a shared object accessible through two methods: wait and signal. The idea behind the concept
Algorithms and Data Structures, Fall 2011 Stacks and queues Rasmus Pagh Based on slides by Kevin Wayne, Princeton Algorithms, 4 th Edition Robert Sedgewick and Kevin Wayne Copyright 2002 2011 Stacks and
First Bytes Programming Lab 2 This lab is available online at www.cs.utexas.edu/users/scottm/firstbytes. Introduction: In this lab you will investigate the properties of colors and how they are displayed