BGSU Logo
BGSU Home BGSU Academics BGSU Admissions The Arts BGSU Athletics Libraries Offices
Department of Computer Science
Computer Science Home Undergraduate Program Graduate Program Computer Science Faculty Academic Advising Mission and Vision
Small font Medium font Larger font Largest font
Left Bracket CS 3350: Standard Data Structures and Algorithms Right Bracket

Course Description

Advanced programming concepts. Adaptation and use of standard class libraries and generic algorithms. Prerequisite: CS 2020.

Course Syllabus

  1. Review (1 week)
  2. Recursive functions * (2)
  3. Advanced C++ * (3)
    1. Pointers versus references
    2. Copy and conversion constructors
    3. Public, private and protected
    4. Overloading functions, cin and cout
    5. Abstract classes, base classes, derived classes and friends
  4. Exception handling with throw and catch * (1)
  5. Templates * (2)
    1. Function templates
    2. Class templates
  6. Adaptation and use of STL data structures (4)
    1. Iterators
    2. Vectors
    3. Strings
    4. Deques
    5. Heap Trees (AKA priority queue in the STL)
    6. Hash Tables (AKA hash_map in the STL)
  7. Use of STL Generic Algorithms (2)
    1. Sorting, shuffling, permuting on strings and vectors
    2. Big-O
  8. Exams (1)

* Intent is to cover the parts of C++ not covered in CS 2010 and CS 2020, but necessary for the understanding, adaptation and use of STL data structures and generic algorithms

Learning Outcomes

Students who complete CS 3350 should be able to ...

  • use software components wisely as tools to solve specific programming problems
  • visualize (animate) the behavior of common algorithms that operate on common software components
  • develop an exact engineering specification for a new software component
  • test the interface and implementation of software components
  • estimate the theoretical efficiency and measure the actual efficiency of software components
  • construct and compare alternative implementations of a given component specification
  • adapt software components for new uses by direct modification or indirectly, by subclassing
  • combine simpler software components to produce more complex components by composition or by inheritance
  • determine whether a given software component is suitable for reuse in large-scale software development projects
  • create software component hierarchies that permit polymorphic programming
  • evaluate the general design of software component libraries

webmaster@cs.bgsu.edu