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

CSE 114 (Computer Science I)

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