Skip Navigation
York U: Redefine the PossibleHOME | Current Students | Faculty & Staff | Research | International
Search »FacultiesLibrariesCampus MapsYork U OrganizationDirectorySite Index
Future Students, Alumni & Visitors
EECS 2011: Fundamentals of Data Structures

Lecture Schedule ( Winter 2020):

  • Section O: at 10:00 - 11:30 am, Mondays and Wednesdays at SLH A
  • Section N: at 4:00 - 5:30 pm, Mondays and Wednesdays at LAS B
  • Instructor: Andy Mirzaian

Course Description:

This course introduces fundamental data structures underlying widely-used algorithms. They include various implementations of arrays, lists, maps, hash tables, priority queues, search trees, graphs, and their algorithmic applications. We express these structures in an Object-Oriented Programming (OOP) context and use the Java Programming Language for this purpose.

The course discusses a number of key concepts in OOP. Abstraction and encapsulation are two such concepts. Abstraction at the data level gives rise to expressing a data structure as an Abstract Data Type (ADT). The concept of data abstraction (ADT) predates OOP. OOP adopts a higher level of abstraction, namely objects. A data structure, like any other abstracted entity, is encapsulated as an object with state (data) and behavior (functionality). An object is an instance of its class type. This facilitates a higher level of procedural abstraction: hierarchical inheritance & polymorphism. Parameters in method calls can now be objects of any specified type, possessing not only pure data, but also specified functional behavior.

An ADT's client is any (user application) class that accesses and invokes the ADT. Through encapsulation, a client can directly access only externally visible members of the ADT, namely its Application Programming Interface (API), and is oblivious to the internal details, hence to any particular implementation, of the ADT. The interaction between the client and the ADT implementation is through this API which acts as a contract between them. This contract is expressed by public & protected class member signatures, pre/post conditions, and invariants. Implementing an API means implementing the corresponding ADT that respects the API contract. An important benefit is code flexibility: the ADT implementation can be changed and improved over time without changing its API, and hence, without breaking any client code. In EECS 2011 students will be asked to design & build a correct & efficient implementation of an ADT to be used by its clientele.

Course Learning Outcomes:

By the end of the course, students will be familiar with the more prevalent data structure patterns, and will be able to design and implement variations on these patterns, and then use them as clients to solve a broad range of real-world problems.

Copyright Law Notice:

Course materials are subject to Canadian copyright law and are the intellectual property of the associated author(s). Lectures, lecture slides, assignments, tests, and their solutions posted on this course website are the intellectual property of Professor Andy Mirzaian. Course materials may not be distributed without explicit written permission from the professor or author. Course material posted online on this course website may not be sold, passed on to others, or posted online elsewhere.

Photographs and audio recordings of lectures are permitted, provided they are used only as a personal study aid. Lectures can only be recorded from your seat. Exceptions may be made for students who are registered with Counselling & Disability Services and have presented relevant documentation from their counsellor to the professor.

Last modified:
2019/12/10 15:35