Data Structures and Analysis of Algorithms

General

Educational goals

The course is a general introduction to data structures, the algorithms that handle them, and their complexity analysis. The topics covered relate to both static and dynamic data structures. The course places particular emphasis on techniques of data abstraction and object-based programming. Java is currently used as the implementation language. Upon completion of the course students:

  • will have a very good knowledge of the underlying data structures
  • will be able to use data structures to implement well designed and efficient programs.
  • will have an understanding of the concepts of abstraction, abstract data types and object orientation and the role they play in the development of programming systems
  • will be able to apply Recursion as a Programming Methodology
  • will have substantive knowledge of Object Oriented Programming techniques using Java in developing Algorithms and Data Structures
  • will be able to analyze the complexity of the programs they are developing
General Skills
  • Search, analyze and synthesize data and information, using the necessary technologies
  • Independent work
  • Teamwork

Course Contents

Introductory Concepts:
Data Structures, Data Types and Implementation
Abstract Data Types
Information hiing, data encapsulation, inheritance and polymorphism.
Primary Data Types in Java
Java Reference Types
Type checking
Complexity Analysis:
Types of Complexity
Examples of Complexity Analysis and  Classification of AlgorithmsLinear Data Structures:
Arrays
ArrayLists, VectorsStrings

The StringTokenizer class in Java

Stacks & Queues
Stack Implementation using arrays
QueueImplementation using arrays
Circular Queues

Dynamic Data Structures:
Linked Lists
Dynamic Memory Alocation
Stack and Queue Implementation using Linked Lists

Recursion:
Recursive algorithms and recursive data structures
Recursion as a Programming Methodology

Trees:
Definitions and terminology
Binary Trees
Implementation of Binary Trees by linked structure
Methods of visiting the Binary Tree Nodes
Binary Search Trees
Heaps-Priority Queues

Graphs:
Definitions and terminology
Ways to implement graphs
Basic graph algorithms.

Files & Streams:
Physical and Logical File Organization
Sequential files
The Stream Concept in Java
File Input Streams
File Output Streams
Various Types of Streams – Filters
Direct access files, hashing

Teaching Methods - Evaluation

Teaching Method
  • Face to face theoretical teaching (lectures, discussion, problem solving, practice exercises).
Use of ICT means
  • Use of slide show presentation software.
  • Using an online learning platform (moodle).
  • Use Object-oriented Java programming language
  • Using an integrated software development environment (eg Netbeans)
Teaching Organization
Activity Semester workload
Lectures52
Development and testing of programming exercises60
Individual study and analysis of literature68
Total 180
Students evaluation

Final Written Examination (100% of the score) that includes:
- Short Answer Questions
- Multiple choice tests
- Problem solving

Recommended Bibliography

Recommended Bibliography through "Eudoxus"
  1. "Algorithms in Java, Parts 1-4 : Fundamentals, Data Structures, Sorting, Searching", Robert Sedgewick, 3rd Edition, Addison-Wesley (2003)
  2. “Data Structures and Algorithms in Java”, Robert Lafore, 2nd Edition, SAMS (200? )
Complementary greek bibliography
  1. (Ελληνικά) Δομές Δεδομένων με Java, Σταμάτης Δημοσθένης, Σημειώσεις διαλέξεων του μαθήματος
Complementary international bibliography
  1. “Data Structures and Algorithms in Java”, Michael Goodrich & Roberto Tamassia, 4th Edition, Addison-Wesley (2006)
  2. "Algorithms in Java, Parts 1-4 : Fundamentals, Data Structures, Sorting, Searching", Robert Sedgewick, 3rd Edition, Addison-Wesley (2003)
  3. “Data Structures and Algorithms in Java”, Robert Lafore, 2nd Edition, SAMS (200? )