<commit_before>---
layout: class
title: "Comp 220: Data Structures, Fall 2018"
catalog-desc: Data structures is a continuation of COMP 161 and explores the data structures and algorithms essential to modern computing. Students will continue to develop Linux-based C++ programs as they design, analyze, and implement and utilize abstract data types such as lists, stacks, queues, and trees. Strong emphasis is put on analyzing and evaluating how implementation choices made by the programmer impact overall program performance.
semester: f18
---

*{{ site.data.policies.syllabus_deviation_v1 }}*

* toc
{:toc}

### Logistics

* Class meetings:
  * Class: MWF 8:00 am - 8:50 AM in CSB 323
  * Lab: Th 2:00 pm - 3:50 PM in CSB 309
* Instructor: <NAME>
  * Office: {{ site.data.me.office }}
  * Phone: {{ site.data.me.phone }}
  * Website: <a href="{{ site.url }}">{{ site.url }}</a>
  * Email: <a href="mailto:{{ site.email }}">{{ site.email }}</a>
  * Office hours: {{ site.data.semesters[page.semester].office_hours }}
* Website: <a href="{{ site.url }}{{ page.url }}">{{ site.url }}{{ page.url }}</a>
* Credits: 1 course credit
* Prerequisites: COMP160 and COMP161 with a C or better.

### Content

Data structures continues the study of abstraction and programming
through a focused study of data structures, algorithms, and abstract
data types. The primary focus of this course is the design and
development of algorithms and programs using data abstraction and
information hiding via abstract data types *ADTs*. Data abstraction
is absolutely fundamental to good programming practice and the
management of large scale problems and data sets. This course is
designed to round out a student's understanding of basic computer
science concepts while strengthening the program design and
development skills through continued use of a test-driven design
methodology.

It is imperative that programmers and program designers be able to
determine which of the many solutions available is the best for their
specific task. Throughout the course, students will focus on to making
solid quantitative and qualitative judgments about program efficiency
and overall program design choices. Gone are the days when "it
works" is a good enough assessment for the quality of a program.

Students will explore the ideas and concepts brought up in class and
homework assignments during the weekly lab session. In addition to
hands on exercises, lab sessions will be used to explore current,
relevant research in computer science.

#### Topics

We will focus on chapter 5 and beyond from the text. This includes,
but is not limited to:

* Review of C++ fundamentals (Chapters 1--4, COMP 161 notes)
* Review of algorithm design, analysis through sorting algorithms (Chapter 10 \& notes)
* Standard container types (Chapter 5)
* Classes and ADT design (Chapter 6)
* Recursive strategies (parts of Chapters 7--9)
* Pointer and array logic (Chapter 11)
* Dynamic memory management (Chapter 12)
* Efficient implementation of container types such as vectors, lists,
  stacks, queues, trees, maps, sets, and graphs. (Chapters 13--17)
  
#### Sources

The course textbook will be: 

* <NAME>. *Programming Abstractions in C++*. Pearson. 2014. ISBN-13:978-0133454840

Other sources will be posted on this webpage as needed.

#### Programming Environment

This course utilizes the [Code::Blocks
ide](http://www.codeblocks.org/) and the GNU compiler for C++
development.

All programs written in this course are required to compile and run on
a server running Ubuntu 18.04.1. All students will have access to the
departmental server and thereby the above development tools. While
development is not required in this environment, *failure to properly
port a program to the required environment could result in your
program not compiling correctly at the time of grading*. All software
for this course is available free of charge and can be found on the
web if students wish to install it on their personal machines.

### Policies

* **Late assignments**: {{ site.data.policies.late_none_v1 }}

* **Academic dishonesty**: {{ site.data.policies.cheating_v1 }}

* **Collaboration**: {{ site.data.policies.collab_v1 }}

* **Electronic devices**: {{ site.data.policies.electronics_v1 }}

* **General expectations**: {{ site.data.policies.expectations_v1 }}<commit_msg>Adding clause about not supporting other development environments.<commit_after>---
layout: class
title: "Comp 220: Data Structures, Fall 2018"
catalog-desc: Data structures is a continuation of COMP 161 and explores the data structures and algorithms essential to modern computing. Students will continue to develop Linux-based C++ programs as they design, analyze, and implement and utilize abstract data types such as lists, stacks, queues, and trees. Strong emphasis is put on analyzing and evaluating how implementation choices made by the programmer impact overall program performance.
semester: f18
---

*{{ site.data.policies.syllabus_deviation_v1 }}*

* toc
{:toc}

### Logistics

* Class meetings:
  * Class: MWF 8:00 am - 8:50 AM in CSB 323
  * Lab: Th 2:00 pm - 3:50 PM in CSB 309
* Instructor: <NAME>
  * Office: {{ site.data.me.office }}
  * Phone: {{ site.data.me.phone }}
  * Website: <a href="{{ site.url }}">{{ site.url }}</a>
  * Email: <a href="mailto:{{ site.email }}">{{ site.email }}</a>
  * Office hours: {{ site.data.semesters[page.semester].office_hours }}
* Website: <a href="{{ site.url }}{{ page.url }}">{{ site.url }}{{ page.url }}</a>
* Credits: 1 course credit
* Prerequisites: COMP160 and COMP161 with a C or better.

### Content

Data structures continues the study of abstraction and programming
through a focused study of data structures, algorithms, and abstract
data types. The primary focus of this course is the design and
development of algorithms and programs using data abstraction and
information hiding via abstract data types *ADTs*. Data abstraction
is absolutely fundamental to good programming practice and the
management of large scale problems and data sets. This course is
designed to round out a student's understanding of basic computer
science concepts while strengthening the program design and
development skills through continued use of a test-driven design
methodology.

It is imperative that programmers and program designers be able to
determine which of the many solutions available is the best for their
specific task. Throughout the course, students will focus on to making
solid quantitative and qualitative judgments about program efficiency
and overall program design choices. Gone are the days when "it
works" is a good enough assessment for the quality of a program.

Students will explore the ideas and concepts brought up in class and
homework assignments during the weekly lab session. In addition to
hands on exercises, lab sessions will be used to explore current,
relevant research in computer science.

#### Topics

We will focus on chapter 5 and beyond from the text. This includes,
but is not limited to:

* Review of C++ fundamentals (Chapters 1--4, COMP 161 notes)
* Review of algorithm design, analysis through sorting algorithms (Chapter 10 \& notes)
* Standard container types (Chapter 5)
* Classes and ADT design (Chapter 6)
* Recursive strategies (parts of Chapters 7--9)
* Pointer and array logic (Chapter 11)
* Dynamic memory management (Chapter 12)
* Efficient implementation of container types such as vectors, lists,
  stacks, queues, trees, maps, sets, and graphs. (Chapters 13--17)
  
#### Sources

The course textbook will be: 

* Roberts, <NAME>. *Programming Abstractions in C++*. Pearson. 2014. ISBN-13:978-0133454840

Other sources will be posted on this webpage as needed.

#### Programming Environment

This course utilizes the [Code::Blocks
IDE](http://www.codeblocks.org/) and the GNU compiler for C++
development.

All programs written in this course are required to compile and run on
a server running Ubuntu 18.04.1. All students will have access to the
departmental server and thereby the above development tools. While
development is not required in this environment, *failure to properly
port a program to the required environment could result in your
program not compiling correctly at the time of grading*. Further, I
may not be able to provide support for installing and using other
development environments. All software for this course is available
free of charge and can be found on the web if students wish to install
it on their personal machines.

### Policies

* **Late assignments**: {{ site.data.policies.late_none_v1 }}

* **Academic dishonesty**: {{ site.data.policies.cheating_v1 }}

* **Collaboration**: {{ site.data.policies.collab_v1 }}

* **Electronic devices**: {{ site.data.policies.electronics_v1 }}

* **General expectations**: {{ site.data.policies.expectations_v1 }}
{'fraction_non_alphanumeric': 0.08130449552712037, 'fraction_numerical': 0.019703317857547278, 'mean_word_length': 4.657911595131326, 'pattern_counts': {'":': 0, '<': 19, '<?xml version=': 0, '>': 19, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3478539', 'n_tokens_mistral': 2481, 'n_tokens_neox': 2235, 'n_words': 1172}