CS2852
Data Structures

We will learn how to put together classes, references, and arrays (and few new tools) into bigger, better structures. These data structures will allow us to quickly search and store data. What fun is data unless you can play with it? We will learn new algorithms for exploring and changing these structures, and new time complexity anlaysis techniques that allow us to predict how fast we can run a program.

Catalog Description

This course covers the organization of data and the algorithms that act upon them. The topics of arrays, linked lists, stacks, queues, trees, sets and hash tables are introduced. Fundamentals of algorithm performance are also introduced, with an emphasis placed on time complexity analysis. Laboratory activities include implementation of data structures as well as the application of data structures from standard libraries. (prereq: SE 1021) (3-2-4 (hover for explanation)) (full catalog)

(From the catalog)

Basics

Instructor
Josiah Yoder
lıɐɯə
npǝ˙ǝosɯ@ɹəpoʎ
Office
L344 (Library, 3rd floor)
Office Hours
See below
 
Phone
ƖƐ96 ᔭᔭᔭ ϛ9ㄥ Google Voice; rings my office and home phone at the same time.
Text
Data Structures, 2E, by Koffman and Wolfgang, Wiley
SE10X1
Introduction to Programming with Java: A Problem Solving Approach, 2nd Ed., by Dean and Dean, McGraw-Hill, 2014, ISBN: 978-0-07-337606-6

Outcomes

On successful completion of this course, the student will:

  • understand and apply complex data structures and algorithms.
  • use appropriate algorithms (and associated data structures) to solve problems.
  • have a thorough understanding of commonly used library data structures.
  • be able to analyze the time complexity of algorithms.
  • understand the use of recursion in problem solving.
  • be able to use data structures in software design and implementation.
  • be able to apply standard library data structures in software design.
  • be able to select appropriate data structures for a given application.

(Acknowlegement: These outcomes come from Dr. Chris Taylor's site, and are the official catalog outcomes for this course)

Strengthening Your Foundation

We will be building much on the foundational concepts you learned in SE1011 and SE1021 (Fig. 1). You may want to start the quarter early by reviewing the material from those courses.

Fig 1. Building on the foundations of SE1011 and SE1021. If you feel like something is missing from those quarters,
don't try to build on thin air! Dig down and lay a good foundation!

If your foundation feels like the one on the left, don't despair! During the quarter, as you work through homework, labs, and practice exams, you can strengthen your foundation by asking & and answering questions about SE1011 and SE1021 that relate to what you are doing.

Start by asking a good question. Then go to the resources below for an answer.

Learning Resources

You can learn by:

Me

I want to help you learn. If you have any ideas about how I can improve, please share them with me. This includes changes to the syllabus, class time, lab time, and more.

I enjoy talking with you. Feel free to drop by my office or email me a time that you would like to meet. I will always be available in my office during office hours, even if I am working on something when you arrive.1.

My Schedule (Office Hours)

Time Mon Tue Wed Thu Fri
8:00 Class
prep
Class
prep
Class
prep
Office
Hour
Class
prep
9:00 Office
Hour
Lab
prep
10:00 CS2852
S362
Lunch &
Lab prep
CS2852
S362
CS2852
S362
CS2852
S362
11:00 CS2852
Planning
SE3910
S365
Office
Hour
Office
Hour
12:00 Lunch Lunch Lunch Lunch
1:00 Dept Mtg Office
Hour
Class
prep
Class
prep
2:00 Class
prep
Lab
prep
Lab
prep
3:00 SE3910
S210
CS2852
S107
SE3910
S210
SE3910
S210
4:00 CS2852
S210
CS2852
S210
CS2852
S210
 

This website

You can see all the pages in the menu that floats on the right for a large screen, and at the top for a small screen. I desire to make the website as intuitive as possible. Please share any suggestions with me.

Class

While I don't mind if you have to skip a class, class attendence is essential so you can learn what material I expect you to know, what HW and quizzes there will be, etc.

In class, I expect you to focus completely on class material. Instead of checking your email or browsing facebook, participate in the class activities and take notes of what you are learning.

If it becomes necessary to consider dropping the class, I am happy to give you advice, but I want you to make the final decision (with the help of your academic advisor). So if you stop coming class, I will not drop you, but instead give you whatever grade you have at the end of the quarter, even if it is an F.

Homework

I expect you to do homework. It is the best opportunity to practice. Homework will be assigned informally as ideas of things to practice or investigate in class.

In addition to the homework ideas from lecture, you may want to ask and answer your own questions. Perhaps things like:

  • Why does this compiler error occur?
  • Is it possible to _____?
  • Can I combine _____ and ____ into a single program?
  • Why?

If you come up with a question, but can't find an answer, ask me! Perhaps I can find it. I might share it with the rest of the class

This quarter, you may also want to do some of Dr. Taylor's practice problems.

Homework is not graded this quarter.

Labs

This quarter, we are learning the foundations of programming. To ensure that you master this material, Labs are individual.

This quarter, lab attendance is mandatory. My hope is that you will find lab to be a great time to ask me questions about the lab and work through things together. Absence from lab will result in a 20-point deduction of your lab grade. In addition, 5 to 15% of the participation grade may be assigned to "in-lab completion" — graded tasks completed in lab.

Labs will be turned in electronically. These are due at 11pm, with a 1 hour grace period. In every uploaded file, include your name, date, and the assignment name. Please only submit a lab once. Multiple submissions are hard for me to keep track of, especially if I've already started to grade the first one.

Untested code is buggy. I find that if your code doesn't compile or hardly runs, that there are many other errors in it. To get more than half credit for a lab, it should compile and run when I test it. If it does not compile & run, please fix the lab and submit it later, or drop a feature or two to get it running again (often the best option).

For every day that goes by beyond the original deadline, it gets much harder to catch up on a lab. As a result, after the deadline, you can receive partial credit for a lab, up to 10% off per day.

All assignments must be turned in by 4:30pm on Friday of Week 10 so that we can wrap things up and I can turn the grades in on time.

Please start early and ask me for help if you get stuck.

Learning Assessment

This quarter, we will use the following to measure your learning: (corrected as discuss in Class 1-1)

Lab projects 25%
Homework 5%
Quizzes 10%
Exam I 20%
Exam II 20%
Final Exam 20%
Total 100%

(Below is the erroneous schedule from the start of the quarter.)

Lab projects 30%
Quizzes15%
Exam I 25%
Final Exam 30%
Total 100%

I sometimes make mistakes in tallying points. If you become aware of an error in grading, please send me an email, and I will fix it and reply by email.

If the error goes beyond tallying points, discussing things in person is a great way to start to resolve an issue. I may ask you to send me an email if I think the case you are asking about requires careful consideration.

Please maintain your own records of your grades and check them against whatever summaries I send to you.

Quizzes & Exams

Quizzes will be announced in class at least one day in advance. They will usually be on Lab day.

Because of the difficulty of preparing fair and accurate tests, you cannot retake a quiz or exam if you miss it or do worse than you hoped. I will drop your lowest quiz score, so one 0 should not be a problem. If you need to skip an exam, you should schedule a make-up exam before the missed exam. I don't always give make-up exams, even if students ask in advance.

Grade Scale

I use the official MSOE grading scale:

≥93% ≥89% ≥85% ≥81% ≥77% ≥74% ≥70% <70%
A AB B BC C CD D F

In final grading, I may award a grade higher than the grade scale if I feel it is more accurate than what the "raw numbers" produce.

Integrity

Your integrity is your most valuable academic possession, significantly more valuable than passing a class or getting a high GPA.

Academic integrity is essentially truthfulness — ensuring that if it appears you have done or know something, you have.

It is possible to accidentally give the impression that work is yours. If something like this happens to you, please let me know as early as possible. It is better if you point it out than if I find it.

Be on the watch for violations of academic integrity, including:

  • Receiving code from another student not on your team, even by looking at it.
  • Giving code to another student not on your team, even by showing them.
  • Looking at another student's work during a quiz or exam.

Read MSOE's Policy on Student Integrity for more details.

When coding, you are encouraged to discuss strategies, but the implementations should be independent. Even discussing the details is not a good idea if it goes too far. If you want to show code, start up an independent program rather than showing an assignment — and use a different application than the assignment at hand to demonstrate the concept you wish to share.

Because of the importance of maintaining academic integrity, I will report apparent academic dishonesty to the Vice President of Academic Affairs. If this occurs, you will get a copy of the report.

Fine Print

1In rare cases, I may need to reschedule an office hour. I will try to both announce this in class at least a day in advance and email the whole class.