CSE214


Course

CSE214

Title

Computer Science II

Credits

3

Course Coordinator

Michael A. Bender

Current Catalog Description

An extension of programming methodology to data storage and manipulation on complex data sets. Topics include: programming and applications of data structures; stacks, queues, lists, binary trees, heaps, priority queues, balanced trees and graphs. Recursive programming is heavily used. Fundamental sorting and searching algorithms are examined along with informal efficiency comparisons.

Prerequisite

C or higher in CSE 114

Course Goals
  • To provide students with additional programming experience using an object-oriented language, with emphasis on larger-scale programs that require the use of sophisticated data structures.
  • To enhance student understanding of abstract data types, pointers, recursion, and algorithmic design.
  • To introduce students to the importance of time and memory efficiency in algorithm design.
Textbook

Data Abstraction and Problem Solving with Java Walls and Mirrors

Carrano and Prichard , 1st update Edition 2004 packaged with CSE214, Supplement, Addison Wesley ISBN: 0536744874

Major Topics Covered in Course
  • Software Design: Specifications; memory and execution time efficiency; introduction to Big Oh notation; abstract data types and examples; review of object-oriented techniques. (2 weeks)
  • Linked Lists: Singly-linked lists; implementation; inserting and removing data; variations: doubly-linked lists, circularly-linked lists; comparison of arrays and linked lists to store general lists. (2 weeks)
  • Stacks and Queues: Basic operations of a stack; implementation using an array and a linked list; various stack applications (evaluating postfix, conversion of infix to postfix, etc.). Basic operations of a queue; implementation using an array and a linked list; queue applications (Josephus problem, simulations, Jai Alai). (2 weeks)
  • Recursion: Recursion and activation records, backtracking, introduction to dynamic programming, tail recursion. (1 week)
  • Binary Trees: Terminology; implementation of trees using nodes; Binary search trees: insertion and removal of data; Tree traversals. Heaps; implementation using arrays; use of a heap as a priority queue. (2 weeks)
  • Balanced Trees: B-trees; 2-3-trees; 2-3-4-trees; red-black trees; AVL trees; splay trees; examples. (1.5 weeks)
  • Searching: Sequential and binary search algorithms; hashing and hash tables; time analysis. (1 week)
  • Sorting: Quadratic sorting algorithms; divide and conquer sorts (quick sort and merge sort); heap sort, time analysis. (1 week)
  • Introduction to Graphs: Terminology; implementations using arrays and linked nodes; graph traversals. (1 week)
  • Midterm(s) (0.5 week)
Laboratory Projects

There are 7-8 programming projects required for the course, typically assigned as follows:

Review of Java, definition of an elementary ADT (e.g. polar coordinate, polynomial, etc.) [2 weeks]

Program using doubly-linked linked lists built from scratch (e.g. storage of song information for MP3 player, grocery list, etc.) [2 weeks]

Program using stacks (e.g. parser for XML), use of Stack ADT from Java API. [1.5 weeks]

Program using queues (e.g. simulation of simple discrete system such as an intersection with a traffic light), definition of a subclass of Vector for queues to illustrate inheritance. [1.5 weeks]

Program using binary trees and recursion (e.g. Hoffman codes, data storage using a binary search tree, etc.). [2 weeks]

Program using hash table to illustrate collision handling and load factor. [1 week]

Simple program in C to learn about pointers and memory management. [1 week]

More substantial program in C to implement a graph or balanced tree and perform traversals on it. [2 weeks]

Course Webpage http://www.cs.sunysb.edu/~cse214