Apr 30, 2024  
2022-2023 Catalog 
    
2022-2023 Catalog [ARCHIVED CATALOG]

CSCI 202 - Data Structures


PREREQUISITES: (CSCI 201 - Computer Science II  or ((SDEV 200 , SDEV 220 , SDEV 230 , or SDEV 240 ) AND CSCI 179 ))
PREREQUISITES/COREQUISITE: MATH 211  or Higher

PROGRAM: Computer Science
CREDIT HOURS MIN: 3
LECTURE HOURS MIN: 2
LAB HOURS MIN: 2
DATE OF LAST REVISION: Fall 2020

Builds on the foundation of Computer Science I and II. The course provides a working understanding of the fundamentals of data structures and algorithms used in modern computer programming. Introduces a variety of data storage alternatives, including stacks, queues, linked lists, hash tables, trees and graphs. Employs the basics of algorithmic analysis, recursion, language translation and software engineering. Discusses the overview, history and comparison of programming languages, as well as virtual machines and language translation.

MAJOR COURSE LEARNING OBJECTIVES: Upon successful completion of the course the student will be expected to:

  1. Demonstrate with proficiency basic procedural and object-oriented concepts of computer programming.
  2. Demonstrate use of a variety of data structures, including:
    1. Stacks and queues
    2. Sets and maps
    3. Linked lists,
    4. Binary trees, AVL trees, and B-Trees,
    5. Hash tables and graphs
  3. Demonstrate fundamental computing algorithms, including:
    1. Sorting
    2. Sequential and binary searches
    3. Insertion, deletion, and balancing trees
    4. Hash tables and collision-avoidance
    5. Directed, undirected and weighted graphs
    6. In-order, depth- and breadth-first graph traversals.
    7. Recursive traversal of various data structures.
    8. Regular expressions and Regex
    9. Demonstrate basic algorithmic analysis:
    10. Analyze the performances of an algorithm with various input sizes
    11. Compare upper and average complexity bounds
    12. Differentiate best, average and worst-case behaviors
    13. Describe algorithm complexity in notation (big O, little O, omega and theta)
    14. Contrast standard complexity classes
    15. Determine empirical measurements of performance
    16. Evaluate time and space tradeoffs in algorithms
    17. Determine whether a recursive or iterative solution is most appropriate for a problem
    18. Identify a variety of real-world problems in computer science solvable using various data structures
  4. Demonstrate the effective use of software engineering principles and practices:
    1. Compare various data structures for a given problem
    2. Investigate factors other than computational efficiency that influence the choice of algorithms.
    3. Apply consistent documentation and program style standards that contribute to the readability and maintainability of software.
    4. Conduct peer code reviews (focused on common coding errors) on program components.
    5. Differentiate between program validation and verification.
    6. Investigate potential vulnerabilities in provided programming code.
    7. Use software tools to evaluate, test, and debug programs.
  5. Demonstrate the principles of secure programming and design:
    1. Investigate security vulnerabilities in various data structures
    2. Implement programs that properly handle exceptions and error conditions.
    3. Describe key terms in cryptology, including cryptography, cryptanalysis, cipher, cryptographic algorithm, and public key infrastructure.
    4. Use a cipher to encrypt plaintext into ciphertext.
    5. Describe the use of cryptographic hash functions for authentication and data integrity.
    6. Contrast symmetric and asymmetric encryption in relation to securing electronic communications and transactions.
    7. Describe security concerns in designing applications for use over networks.
    8. Illustrate secure connectivity among networked applications.
  6. Analyze the goals of parallelism and concurrency.
    1. Describe various programming constructs for synchronization.
    2. Contrast low-level data races with higher level races.
    3. Investigate methods, such as mutual exclusion, used to avoid race conditions.
    4. Discuss security vulnerabilities related to parallelism and concurrency.
  7. Discuss the history of programming languages, and be able to compare languages for features and applicability.
  8. Discuss the concept of a virtual machine and the use of intermediate languages, and/or linked libraries.
  9. Discuss interpreters, compilers, and the machine-dependent and -independent aspects of translation.


COURSE CONTENT: Topical areas of study include -  

  • Algorithmic analysis
  • Interpreters
  • Artificial Intelligence
  • Linked libraries
  • Basic procedural concepts
  • Linked Lists
  • Compliers
  • Object-oriented programming
  • Cryptography
  • Recursion
  • Data Structures
  • Regular Expressions
  • Expert Systems
  • Security
  • Fundamental computing algorithms
  • Software engineering principles
  • Graphs
  • Trees
  • History of programming languages
  • Virtual machine
  • Intermediate languages

 
Course Addendum - Syllabus (Click to expand)