General Information
Instructors Our offices are in the new Engineering Technology Suite off of the Reynolds breezeway; here is our contact information.
- John Morrison, Lives in Library, telephone: 919-416-2746, email: morrison at ncssm dot edu
- Keethan Kleiner, 2nd Watts, telephone: 919-416-2812, email: keethan.kleiner AT ncssm dot edu
You can send snailmail to us at NCSSM, 1219 Broad Str., Durham, NC 27705.
Prerequisites: CSC434 or permission of department. You should have a strong grasp of C programming, pointers, and heap management to be in this class.
Learning Resources:
- Learn C the Hard Way
You should complete as many exercises in this as you can. It will exceed what we do
in class, but a firm command of it is a huge notch on a resume. You can learn about
make
and other useful utilities here. - Aho and Ullman's The Giant Turtle Book This will be our source for a lot of material on algorithmics We will focus on chapters 1-4 and chapter 6. You should download the chapters to your lappy so they are available offline. This book belongs to the Public Domain. You can download it to your lappy for easy access.
Course Description: You will learn how to implement the stacks using a link bsaed and array based implemenation. We will then study the implementation of the major data structures (stacks, lists (if not done in 434), queues, priority queues, heaps, hash tables, trees) and do several projects that apply these to bulding several working applications that depend on these data structures. Emphasis will be placed on doing good memory managmenent.
Course Objectives: These are the things you will learn about.
- You will learn how data structures are implemented at a low level in C.
- You will use data structures to build applications. Examples with stacks: Create an HTML/XML well-formedness checker using a stack. Create a terminal-based RPN calculator. Examples with trees: write a simple expreession evaluator.
-
You will learn how to use the
gdb
debugger to trace code andvalgrind
to diagnose, isolate, and eliminate segmentation faults. Since the data structure business is laden with pointers, you will need these tools if you want to see an error message other thansegmentation fault
. - You will learn about link-based stacks, and then extend this to a full-service link-based list.
- You will learn how to execute a mathematical induction argument and how induction relates to recursion in computer programs.
Rough outline of the classThis order may vary slightly depending on the preferences of the class.
- Implementing stacks
- Binary trees, Binary Search Trees, and their traversals
- Queues and Level-Order Tree Traversal
- Heaps and Priority Queues
- Implementing Dictionaries: Hash Tables
Course Goal: We will have several major programming projects throughout the term. You will do a lot of coding "where the rubber meets the road," which means it will be attended by juggling of a lot of technical detail including proper file IO and lots of debugging. These projects will largely be done in pairs; in some you get to choose a partner, in others, you are randomly assigned a partner.
Class Mechanics
What to Bring to Class Bring your lappy and its power cord. We will use computers most days.
Class Organization: This class is at once lab and lecture. We will demonstrate coding constructs and have you try them right away. You are encouraged to bring your laptop to class and configure your machine to your liking. You are expected to particpate in class discussion and to be helpful when we are coding "live" in class.
You are encouraged to share ideas and ask questions. Unless I specify otherwise, you may help each other debug code. For further guidance, see our policy on Academic Honesty.
Programming Assignments and Other Assessments: No one really understands what is going on in a any class with significant analyticl content class until they actually make things work. It's this simple: if you can't do this, you don't really understand the material. The biggest mistake made by many CS students is that they confuse an active understanding of the material with a passive understanding. Until you attempt, fuss over and debug programs, you are nowhere. Therefore, you will see work on a wide variety of programs and projects.
Whoa! Back up!
You are expected to back up your work on cs2.ncssm.edu
; accounts on this
server have been provided to all of you.
You should keep any written graded assignments returned to you, and keep the programs
you turn in in your electronic files. This is your insurance against us accidentally
corrupting, destroying or misplacing your files. This does happen sometimes!
Academic Honesty in this class:
You are encouraged to share ideas and ask questions. Unless we specify otherwise, you may help
each other debug code. You may use diagrams, analogies, or other un-technical explanations.
You may not share any code or any "dead-giveaway" help. When you help classmates, your goal
is to enable them to solve similar problems on their own. If you don't think you can comply
with this guideline you should turn down your classmates' request for help. Refer them to
your instructor. You are bound by policy as laid out in these two documents:
- Academic Honesty Policy for Computer Science, as well as
- School-Wide Classroom Policy
Attendance and Tardiness Policy:
Be presnent, mentally and corporeally. Be on time.
Class meets four times a week and takes lab. You are expected to attend every class in order to be successful
in mastering the material covered. If you are more than 5 minutes late you will be considered
Tardy. If you are more than 25 minutes late you will be considered Absent.
Participation is vital to your progress in class. Excessive unexcused absence and tardiness
will not be tolerated and will reflect poorly in your grade. You are expected to be aware of
attendance policy outlined in the Student Handbook and to adhere to it.
Late/Incomplete/Makeup Work in this class:
When you anticipate an excused absence, see us ASAP for makeup arrangements. By
nature, this class builds sequentially and depends on steady progress. If you run into
difficulty, see us and we can grant you and extension to complete your program or project.
Multiple Major Assignments: If you have more than 2 major assignments due on the same day as a scheduled major assignment in this class, please let your instructor know and contact Academic Programs at least 48 hours in advance for relief. We are reasonable people as long as this is not abused.
The Classroom Policy Page contains all of the documents pertaining to general classroom policy in Computer Science; these apply to all CS classes. Make sure you read and understand them.
For information on the following school wide policies, please reference the current version of the Student Handbook available under the NCSSM folder found in the Documents & Forms chiclet at https://my.ncssm.edu. It is your responsibility to be familiar with these policies.
- Academic Honesty
- Laptop Computers and Electronic Devices in the Classroom
- Class Absences and Tardies
- Late and Incomplete Work
- Late Work Due to Excused or Approved Absences
- Relief from Multiple Major Assignments and Tests
Grading
A rant note about grades:
We believe that the over emphasis of grades impedes a student's ability to learn. This is a
school, a place for learning. Please do not let a focus on grades prevent you from focusing
on learning. If you learn and work hard, your grade will take care of itself.
"I have never let my schooling interfere with my education." - Mark Twain
Grading
- Programming Projects and Problem Sets, 80%: There several programming projects. One or more may be group projects. Sometimes you will have a choice of partner, sometimes this will be randomly assigned.
- Final Project: This may be done solo or in partnerships of two. You are to create a working application in the using the principles learned in this class. You are encouraged to use external code and libraries. You must give credit if you are using code not in C's Standard Libraries. The final project counts twice a regular programming project grade and it is averaged in with your other projects.
- Class Participation, 20%: You are expected to participate in the life of this class by contributing to discussions. You may be called upon to appear in front of class to lead a discussion or to create code.
Grading Scale:
A: 90 - 100
B: 80 - 89
C: 70 - 79
D: Below 69