CIS 223
Data Structures and Algorithms
Course Syllabus
Spring, 1997

Frank Friedman
CC 303

I. Prerequisite Skills:

  1. Two courses in C++ programming skills (CIS 67, and 68) or the equivalent. In particular:
    1. Working knowledge of the C++ programming language.
    2. Working knowledge of the basic ideas of procedural and data abstraction and how to put these ideas to work in solving problems of moderate complexity.
    3. Ability to use and implement simple user-defined data types using classes.
    4. Ability to design small programs using an object-oriented approach.
    5. Some skill in the manipulation of basic data structures -- arrays, linked lists (stacks and queues), trees -- construction, adding, deleting, modifying, searching, sorting, etc.
    6. Some experience in character manipulation: conversion of internal modes of data representation, etc.
    7. Introductory backgound in solving problems using recursion.
    8. Introductory understanding of the run-time support mechanism for Pascal or C: run-time stack, heap, etc

  2. One semester of assembly language programming (CIS 072 or the equivalent), especially: the basic concepts of one and two-pass assemblers.

  3. At least one semester (preferably two) of discrete math, such as CIS 66, MATH 141, or equivalent

II. Catalog Description:

Program style, organization, and design with an emphasis on the use of abstract data types and the object-oriented program design paradigm in the construction of larger-scale programs. Choices and analysis of algorithms and data structures. Topics include recursion, searching, sorting, string manipula-tion, search trees, hash tables, AVL trees, B trees, files, and dynamic storage. Group work will be required and two larger projects will be assigned.

III. Course Objectives:

In this course we examine a number of data structures and associated algorithms that are fundamental to the study of computer science. The analysis of the efficiency of algorithms is also discussed. The course is an extension of CIS 068 and features a more in-depth study of the data structures introduced in CIS 068 and the study of some additional, more advanced data structures. Algorithm and data structure choices will be discussed and there will be a heavy emphasis on the use of abstract data types and object-oriented design. Students will study examples of programs developed using ADTs and the object-oriented approach, and will be expected to develop their own small to medium size programs as well.

The principle programming language of implementation is C++. For the most part, C++ will be introduced by example, as it is anticipated that students will have already been programming in C++ (for at least two semesters). Programs involving the use of data structures and algorithms and emphasiz-ing software design approaches using abstract data types and object-oriented paradigms will be required. At least two group projects will be assigned.

This is a University Writing Course. Students will be asked to produce written, coherent program documentation and may be asked to write 3 to 4 short papers and/or group project progress reports. Grades on all written work will be based both on technical content and quality of presentation.

IV. Texts:


V. Other Reading:

Friedman/Koffman and Headington/Riley are books used in CIS 067 and 068. All books except these should be on 2-hour/overnight reserve in Paley Library reserve section basement level of Paley. (If some are not yet there, please let me know, and be patient -- they may still be on order.)

***** BOOKS *****


VI. Course Outline: and Reading Summary

  1. Programming, Software Engineering, C++ Classes (1 week)
  2. Assigned Reading:

    Exercises and Programming Problems:

  3. Review of Some Key Issues in using C++ (1.5 weeks)
  4. Assigned Reading:

    Exercises and Programming Problems:

  5. Covering the Basics of C -- argument passing and input/output (2.5 weeks -- including lectures on the Assembler)
  6. Assigned Reading:

    Exercises and Programming Problems (Part B):

    ***** FIRST EXAM (1/2 week) *****

  7. Recursion (2 weeks)
  8. Assigned Reading:

    Exercises and Programming Problems:

  9. The Object Oriented Paradigm -- Inheritance, Virtual Functions (2.5 weeks)
  10. Assigned Reading:

    Exercises and Programming Problems:

    ***** SECOND EXAM (1/2 week) *****

  11. Dynamic Data Structures -- Lists (1 week)
  12. Assigned Reading:

    Exercises and Programming Problems:

  13. Searching and Sorting with an object-oriented flavor (1.5 weeks)
  14. Assigned Reading:

    Exercises and Programming Problems:

  15. More on Dynamic Data Structures -- Trees (2 weeks)
  16. Assigned Reading:

    Exercises and Programming Problems:

  17. Graphs (if any time remains)
  18. Assigned Reading:

    Exercises and Programming Problems: (none)

    ***** FINAL EXAM *****

    Return to Previous Page