CSCI 203-01 Data Structures

Fall 2020

 

Classroom location:

                                         online

Class schedule:

                                         online, MWF 2-2:50pm, and asynchronously

Prerequisites:

                                         C or better, CSCI 216

Instructor:

                                         Dr. Don Allison

Office location:

                                         online, Blackboard Collaborate Ultra

Phone:

                                         436-3439

Email:

                                         allisodl (at) oneonta.edu

Office Hours:

                                         MWF 5-7pm

                                         Others by appointment using Blackboard Collaborate Ultra or Microsoft Teams

 

Catalog Description:

Covers the representation of complex information in computer memory. Considers such structures as graphs, trees, stacks, strings, lists, and queues, with implementation of algorithms using a contemporary programming language.

Course Description (the inside scoop):

This course is a programming-intensive course.  It is intended to expose you to all the basic data structures and many of the algorithms used commonly in computer science.  A secondary aim is to give you lots of practice writing programs in C/C++ that are more involved than the simple programs that you wrote in CSCI 116/216, when you were mastering the syntax of the language.  There will be a programming assignment every couple of weeks.  Each assignment will be to implement a major data structure, and to write a program that uses that data structure to solve a problem.  Although there will be fewer programs to write than in 116, each program will be larger and longer.  (Expect that these programs will take several hundred to a few thousand lines of code, as compared to a hundred or so for the more complex 116 programs.)

 

Course Goals/objectives:

The purpose of this course is for students to develop fluency in the algorithms and data structures that are the foundation of any reasonable sized computer program.  At the end of the course, students should have a good understanding of the basic data structures used in computer science, the ability to implement any of the accompanying algorithms, and should be able to explain the advantages, disadvantages, and computational complexity of each.

 

A second objective of the course is to develop your programming abilities further.  To this point all the programs you have written have been to illustrate specific concepts and principles, and have been short enough to be contained in one file.  The programs we write in this course will be larger and more complex, and often will span several files.  We will not only implement a particular data structure with all its supporting functions, but will then use that data structure to solve a problem.  By the end of this course you should be able to write any program required of you in any of the advanced computer science courses that you will take.

 

Textbooks and Software:

A Practical Introduction to Data Structures and Algorithm Analysis, by Shaffer, 2nd edition, published by Prentice Hall, ISBN 0-13-028446-7.

C++ Pocket Reference, by Loudon, published by O’Reilly, ISBN-0-596-00496-6.

The first text will be our reference for data structures and algorithms, and advanced topics in C++ programming.  The second book is a quick reference for the C++ language, the language that will be used for all programming assignments for this course.  If you have already taken 116 and 216 in C++ then you will want to refer to this book for some of the more advanced concepts we will be using.  However, if all your previous programming has been in Java, you will definitely want to read this book from cover to cover!  For the programming projects, we will be using Microsoft Visual Studio 2019 under Windows 10, or GNU C++ under Linux, for program development.

 

Programs for this course can be developed on any platform that supports the C++ programming language.  However, I will be using (and will assume your assignments will work with) Windows 10 and Microsoft Visual Studio 2019, both of which are for free to our students.  You will need your own computer and the Microsoft products if you want to replicate the teaching environment.  If you need a copy of Windows 10, it is free for students here.  You can get the community edition of Visual Studio for free from here.  You can also get a copy of both Windows 10 and Visual Studio 2019 through the MSDN Academic Alliance—email me for details, but be warned that Visual Studio 2019 has gotten so large that the install won’t fit on a DVD anymore!  You’ll need a high speed internet connection to install it.  Other options include using TextPad (shareware) and the free Borland command line version of their C++ compiler which you can download from their web site.  If you prefer a UNIX/Linux environment, G++ is probably the best C++ compiler currently available, and is available for free as well.  You could also try Dev C++, Eclipse, Netbeans, OpenWatcom, or Clang.  Macs have gcc and g++ available in the command line of the underlying BSD Unix.

 

 

Reading list/Additional resources:

Items of possible interest found in our library:

·       The Annotated C++ Reference Manual, Margaret Ellis, QA76.73.C153 E35 1990

·       C++ Primer, Lippman & Lajoie, QA76.73.C15 L57 1998

·       The C++ Programming Language: Special Edition, Bjarne Stroustrup, Addison-Wesley, 3rd edition, ISBN 0201700735 (apparently culled?!?!?)

·       Accelerated C++: Practical Programming by Example, Koenig & Moo, Addison-Wesley Professional, 1st edition, ISBN 020170353X

·       C++ Coding Standards: 101 Rules, Guidelines, and Best Practices, Sutter & Alexandrescu, Addison-Wesley Professional, ISBN 0321113586

·       The C++ Standard Library: A Tutorial and Reference, Nicolai Josuttis, Addison-Wesley Professional, 1st edition, ISBN 0201379260  QA76.73.C153 J69 1999

·       The Art of Computer Programming, Donald Knuth, 2nd edition, QA76.6.K64v. (volume 1, Fundamental Algorithms, volume 2, Seminumerical Algorithms)

·       The Art of Computer Programming, Volumes 1-3 Boxed Set, Donald Knuth, Addison-Wesley Professional, 2nd edition, ISBN 0201485419

·       Data Structures and Algorithms, Aho, Hopcroft & Ullman, QA76.9.D35 A38 1983

·       Expert C Programming: Deep C Secrets, Peter Van der Linden, SunSoft Press, 1994  QA76.73.C15 V356 1994

 

Tentative Schedule:

(order of readings & other assignments, by due dates, course activities, course content by expected order of coverage, test dates and test coverage)

 

 

Dates

Monday

Tuesday

Wednesday

Thursday

Friday

Aug 24-Aug 28

Classes start

Add-Drop begins

Vesuvius Day

National Banana Split Day

National Dog Day

Just Because Day

Add-Drop ends Sunday

Stuffed Green Bell Peppers Day

Aug 31-Sep 4

National Eat Outside Day

National Cherry Popover Day

VJ Day

Getting started program due

Skyscraper Day

Last day to add a full semester course

College closes after last class

Newspaper Carrier Day

Sep 7-Sep 11

Labor Day

National Salami Day

Classes resume

National Ampersand Day

Teddy Bear Day

Swap Ideas Day

Make Your Bed Day

Sep 14-Sep 18

National Cream Filled Donut Day

Felt Hat Day

National Play Doh Day

Constitution Day

Rosh Hashanah

Sep 21-Sep 25

TAP Certification begins

Miniature Goof Day

Autumn Equinox

Dogs in Politics Day

EXAM #1

Exam 1 Sample 2

National Cherries Jubilee Day

National Comic Book Day

Sep 28-Oct 2

Ask a Stupid Question Day

Yom Kippur ends

Confucius Day

National Mud Pack Day

Lists, stacks & queues program due

International Coffee Day

National Custodial Worker Day

Oct 5-Oct 9

World Teacher’s Day

Mad Hatter Day

Bald and Free Day

American Touch Tag Day

Moldy Cheese Day

Oct 12-Oct 16

Columbus Day

Interim progress reports due

International Skeptics Day

National Dessert Day

Trees & heaps program due

White Cane Safety Day

Dictionary Day

Oct 19-Oct 23

Evaluate Your Life Day

Brandied Fruit Day

Last day to drop

International Nacho Day

National Nut Day

National Mole Day

Oct 26-Oct 30

National Mincemeat Day

Black Cat Day

Plush Animal Lover’s Day

Hermit Day

Sunday, turn clocks back

End Daylight Saving Time

National Candy Corn Day

Nov 2-Nov 6

Deviled Egg Day

Cliché Day

Election Day

King Tut Day

Sorting program due

Guy Fawkes Day

Saxophone Day

Nov 9-Nov 13

Spring Pre-enrollment begins

Chaos Never Dies Day

EXAM #2

Forget-Me-Not Day

Veteran’s Day

Chicken Soup for the Soul Day

Friday the 13th

Nov 16-Nov 20

National Fast Food Day

Homemade Bread Day

Occult Day

Hashing program due

Great American Smokeout

College closes after last class

Absurdity Day

Nov 23-Nov 27

BREAK

National Espresso Day

BREAK

All our Uncles are Monkeys Day

BREAK

Last day to withdraw

National Parfait Day

BREAK

Thanksgiving

BREAK

Black Friday

Nov 30-Dec 4

Classes resume remotely

Cyber Monday

Eat a Red Apple Day

National Fritters Day

National Roof over Your Head Day

Santa’s List Day

Dec 7-Dec 11

LAST DAY OF CLASSES

Last day for Incompletes

Pearl Harbor Day

STUDY DAY

National Brownie Day

Exams Begin

(8 MWF)

8-10:30am

(11 MWF)

11am-1:30pm

(2MWF)

2-4:30pm

CSCI 203

Graphs program due

Christmas Card Day

(8:30 TR)

8-10:30am

(11:30 TR) 11am-1:30pm

(2:30 TR)

2-4:30pm

Hanukkah begins

(9 MWF)

8-10:30am

(12 MWF)

11am – 1:30pm

CSCI 100

 

(3 MWF)

2-4:30pm

CSCI 243

National Noodle Ring Day

Dec 14-Dec 18

(10 MWF)

8-10:30am

(1 MWF)

11am-1:30pm

CSCI 310

(4MW)

2-4:30pm

CSCI 343

Roast Chestnuts Day

(10 TR)

8-10:30am

(1 TR) 11am-1:30pm

(4 TR)

2-4:30pm

Exams End

National Lemon Cupcake Day

National Chocolate Covered Anything Day

National Maple Syrup Day

Hanukkah ends

https://suny.oneonta.edu/academics/college-calendar/spring-key-dates-deadlines

http://www.holidayinsights.com/moreholidays/

 

 

General Policy Information:

All college policies will be adhered to, including policies on attendance, academic honesty, etc.  Students are expected to be familiar with and adhere to these policies as outlined in the student handbook, this syllabus, and other administration publications.  SUNY Oneonta Course Policies and Procedures

 

 

 

Attendance Policy:

This course meets synchronously, MWF 2-2:50.  You are expected to be on blackboard at those times, ready to participate.  In addition, I will post lectures on blackboard that you are to watch before the next class meeting.  In general, you will watch lectures on the material asynchronously, and then during the synchronous portion, I will answer questions, we will discuss the topic more in depth, we will write code illustrating the concepts, etc.  The asynchronous portion builds a foundation for your knowledge, while the synchronous portion solidifies it and helps you apply it.  Both are important to doing well in the class!

 

 

Collaboration Policy:

Cheating or other academic dishonesty hurts others as well as yourself and will not be tolerated!  You are expected to personally produce everything you hand in for this class yourself.  Plagiarism can get you in trouble in the “real world”, and it will get you in trouble in this class.  It is okay to ask your neighbor or a friend how to do something for one of the projects (at the algorithm level), but you should actually write the code yourself when creating anything you are turning in.  It is not okay to ask your neighbor or friend how to do something during any of the exams!  It is also not okay to directly copy your neighbor’s or friend’s code!  You should also be able to answer any question I have about how every one of your programs works.

 

 

Programming Style Guidelines:

Since this is an upper division course, it is expected that your programs will follow good programming style conventions.  You should indent your code to reflect its internal structure.  You should use block comments to explain what your code is doing at a high level.  Each function should have a header that gives the function name, the inputs, the output(s), and lists any side effects, as well as providing a two or three sentence summary of what the function does.  In addition, your main program file should have a block header similar to the following:

 

// CSCI 203 Data Structures Fall 2020

// Program #2: Stacks and Queues

// Author: Joe Student

// Date Due: September 16, 2020

// This program uses stacks and queues

// to implement data structures

// for an operating system.

 

Your header should include the course name and number, the assignment number, your name, the program due date, and a two or three sentence description of the purpose and function of the program.

 

Program Turn-in Procedure:

You should print out all your code as PDF files, along with sample output appended as comments to the end of the file that contains the main function, and turn that in to me using Blackboard.

 

Email:

Any time you need to communicate with me about the course via email, you MUST put “CSCI 203” in the subject line.  Otherwise it will get lost and I won’t see it.

 

 

Grading and Other Administrivia:

 

Exams:

There will be two midterm exams and a final exam experience.  The midterms will each count 15% toward your final grade, while the final exam experience will count 20%.

 

Projects:

The projects are an integral part of the course, since this is where much of the learning will take place.  They are to be done individually, and turned in as described above.  There will tentatively be 7 projects, including the getting started project.  In addition, I might assign homework exercises from the text.  The homework exercises, if any, will be combined and their total will count as another programming project.

 

Grade Computation:

 

Evaluation

Weight

Tentative Date

Midterm Exam #1

15%

23 September

Midterm Exam #2

15%

28 October

Final Exam Experience

20%

9 December, 2pm

Projects

50%

See schedule above

Total

100%

 

 

Make-up Test and Late Assignment Policy:

Assignments are due at the beginning of class on the day shown on the schedule above.  Late projects will not be accepted without a really good reason.  Any adjustments to project due dates will be announced in class and posted on the web version of the syllabus.  Assignments turned in late will be penalized 50% for the first week after the due date, and not accepted after that.  (You should be working on the next project by then instead of trying to finish the previous one—otherwise you will ALWAYS be late with your assignments!)  You should plan to complete your tests on the day and time when scheduled.  Any makeups will be allowed only for legitimate, school-approved excuses, and should be arranged with the instructor as soon as possible after you discover you can’t take the exam at the scheduled time (before the exam is given whenever possible).  In any case, all work must be completed by the last class, including any makeup exams.  Exams missed for unexcused absences, or exams not made up by the last day of classes will be recorded as a zero grade.

 

Additional resources:

For students wishing to explore further or to find answers to questions not covered in the text, there are many books and web sites on what is traditionally called the CS2 course.  If you have any particular areas you would be interested in for further reading and study, please ask me and I can recommend a range of books for you to consider.  For further readings in the area of C++ or data structures, some of the classics are listed above.

 

Additional unique aspects of the course:

Unlike more traditional memorize and regurgitate courses, this course has a strong hands-on learning, or learning by doing component, represented by the projects.  This enhances retention, reinforces understanding, and ensures that the student masters the material well enough to be able to use it in other projects.  Students more comfortable with a traditional classroom approach might want to switch to another section.

 

Emergency Evacuation:

Since I don’t know where you are living, it is up to you to know the evacuation procedures for your dorm or residence.  If you are on campus, the procedures are described here:  http://www.oneonta.edu/security/documents/EmergencyEvacuationProcedures.pdf.

 

Required ADA Statement:

Students Diagnosed with a Disability—All individuals who are diagnosed with a disability are protected under the Americans with Disabilities Act, and Section 504 of the Rehabilitation Act of 1973. As such, you may be entitled to certain accommodations within this class. If you are diagnosed with a disability, please make an appointment to meet with Accessibility Resources, 133 Milne Library, ext. 2137. All students with the necessary supporting documentation will be provided appropriate accommodations as determined by the Accessibility Resources Office. It is your responsibility to contact Accessibility Resources and concurrently supply me with your accommodation plan, which will inform me exactly what accommodations you are entitled to. You will only receive accommodations once you provide me with an Accessibility Resources accommodation plan. Any previously recorded grades will not be changed.

 

 

Addendum added by the provost

 

Campus Resources

Academic Department Information

·       Department Phone Number: (607) 436-3708

·       Department Email Address:

·       Department Location: 274 Fitzelle

 

Other Resources

·                Academic Advisement

·                Accessibility Resource Center

·                Student Learning Center

·                Milne Library

·                Counseling Center

·                Office of Equity and Inclusion

 

 

Course Policies

See the SUNY Oneonta Course Policies and Procedures web page.

 

Campus “Actions for Safety” Requirements and Guidance

See the Actions for Safety campus web site.

 

Addendum added by me

I am trying a couple of new things this semester since the class is online.  If they work, I will continue them throughout the semester…if they aren’t working, I will switch to something else, but I will let you know if things change, and I will seek your feedback before making changes.

 

Flipped Classroom:

This semester I’m going to try something called a flipped classroom.  Instead of lecturing during class time and having you do homework outside of class, I’m going to post lectures as videos for you to watch outside of class, and then in class, we will discuss the material in the lectures, answer questions about it, ask questions about it, write programs, go over assignments, etc.  For this to work, you are going to have to watch the videos before class, so that you are familiar with the material and can discuss it.  Hopefully, this will make the classes more interactive, and also help you understand and retain the material better as you are exposed to it twice, and also work with it in class.

 

Extra Credit:

To encourage participation and your keeping up with the material, I will be asking questions during the synchronous part of the class.  I will call on specific people for the answers, until I get the answer or give up.  If you answer the question correctly, I will record a ‘+’ by your name; if you answer the question incorrectly, I will record a ‘-‘ by your name; and if you don’t answer at all (eg you aren’t online), I will record as ‘X’ by your name.  At the end of the semester, I will count the number of ‘+’s and subtract the number of ‘X’s.  Minuses don’t count because you at least attempted the question, even if you got it wrong.  If the total score is positive, I will scale it to be between 0 and 5, and that will be the number of points added to your final grade.