CMPS 13
- No previous classes available
CS13H Honors Introduction to Programming and Data Structures
Catalog copy
CS13H. Honors Introduction to Programming and Data Structures. F
An honors programming and data structures course for outstanding
freshman computer science and engineering majors with previous
programming experience. This course covers the material usually
taught in CS12A, Introduction to Programming, and CS12B, Data
Structures. The first three weeks of this class cover material taught
in CS12A: programming and documentation skills, algorithmic problem
solving, and programming methodologies. Topics for this portion of
the class include, but are not limited to, procedures and functions,
conditionals and loop control structures, static and dynamic memory
manipulations, and text processing. The remaining seven weeks of this
class cover material taught in CS12B: common data structures and the
algorithms associated with each data structure.Topics include big "O"
notation; pointers, recursion, and dynamic allocation; linked lists
and list processing; stacks, queues, binary trees and binary search
trees; simple sorting techniques and simple search techniques.
Prerequisite(s): Permission of the instructor. In general, eligible
students must be eligible to enroll in Mathematics 19A (Mathematics 2B
or 3 or Mathematics Placement Exam score of 40 or higher) or
completion of Mathematics 19A or 11A. (General Education Code: IN.),
have received a grade of A or B in previous programming classes (high
school or equivalent), or a score of 3 or 4 on the CS AP test.
Explanation of prerequisites
CMPS 13H is an honors freshmen-level introduction to programming and
data structures. It requires some prior programming experience and a
degree of mathematical sophistication.
Required Skills to pass the course
1. Basic use of Unix: cd, pwd, ls, vi, etc.
2. Use of java tools: javac, java, jdb
3. Basic software design principles: design, documentation, comments,
coding style
4. Familiarity with java keywords, types, and syntax
5. Command of java programming fundamentals:
A. declarations and assignments
B. procedures and functions
C. conditionals and loop control structures
D. static and dynamic memory manipulations
D. text processing
6. Ability to use java to solve basic programming problems
8. Ability to use tools to Make software, separate compilation
9. simple linked list manipulation, testing, and debugging
10. knowledge of linear structures, stacks and queues
11. understanding of interface vs implementation
12. recursion and intuitive understanding of asymptotic complexity
13. knowledge of trees and associated algorithms
14. knowledge of simple forms of searching and sorting
15. familiarity with Java, ANSI C, and Unix tools
Core topics (must be taught)
1. Tools: javac, java, etc.
2. I/O
3. Data types
4. Declarations and assignments
5. Procedures and functions
6. Conditionals and loop control structures
7. Recursion
8. Static and dynamic memory manipulations
9. Basic text processing
10. Classes and Object-Oriented Programming fundamentals
11. basic pointer skills
a. allocation of objects (structures) and the use of
references (pointers) to objects
b. construction and access to elements of linked lists,
insertion into, deletion from, and traversal of linked
lists
12. interactive debugging and program tracing
a. assert statements, preconditions and postconditions
b. using print statements to trace programs
c. use of specific interactive debugging tools, breakpoints,
execution tracing, dumping values of variables
13. simple linear data structures
a. stacks and queues
b. linked list implementation of each
c. array implementation of each and resizing of arrays
14. asymptotic complexity analysis, big-``O'' notation
a. informal discussion of the basic concepts
b. intuitive analysis of specific algorithms given in class
without any significant mathematical rigor
15. trees
a. binary trees
b. depth first traversals: preorder, inorder, postorder
c. construction, insertion, deletion of nodes in binary trees
d. implementation of binary trees using references (pointers)
and nodes
16. searching and information retrieval
a. linear searching an array and a linked list
b. binary searching an array
c. construction and searching of binary search trees,
d. insertion and deletion in binary search trees
e. intuitive reference to balanced trees, but no details
on the balancing algorithms
f. informal discussion of asymptotic complexity
17. sorting, details of one of the O(n^2) sorts
a. insertion sort
b. possibly bubble sort or selection sort
LANGUAGE- AND UNIX- DEPENDENT TOPICS
18. All topics listed under part 1 are currently taught in Java
a. interface classes vs implementation classes
b. minimal use of object-orientation, except that collection
(container) classes are written generically to hold
Objects or Comparables as appropriate
c. wrapping and unwrapping of primitive objects and casting
to/from Object and Comparable
19. programming interaction with Unix
a. basic Unix commands and interaction via the command line
b. shell pipes and file redirection
c. access to command line arguments, standard input,
standard output, reading and writing files
d. tools to Make software automatically using separate
compilation of modules
20. introduction to ANSI C
a. basic libraries, , , ,
, , etc.
b. header files and implementation files
c. emulation of Java references using C pointers, avoiding
any usage of pointer arithmetic
d. emulation of Java object allocation using malloc/ free
e. dynamically allocated and resizing of arrays in C using
malloc/ calloc/ realloc
f. compilation of source files into object files and
linking of object files into executable images,
using tools to Make this automatic
Optional topics
1. expression trees and relation to reverse polish notation
2. hash tables with collision resolution by chaining
3. informal discussion of balanced binary search trees
4. breadth first traversal of trees using a queue
5. sorting, discussion of better sorts, O(n log n), such as
quicksort, mergesort, or heapsort
6. experience constructing Makefiles for automatic separate
compilation and linking of programs
7. stdin, stdout, stderr, system exit codes in C and their
equivalents in Java
8. assembling Java class files into a jar file to Make
execution more flexible than the use of the CLASSPATH.
Required Text(s):
Pohl and McDowell, "Java by Dissection", 3rd Edition, Addison-Wesley,
2002.
Carrano, Pritchard, ``Data Abstraction and Problem Solving in Java'',
Addison-Wesley, 2001. The basic data structures textbook.
Optional Text(s):
Muldner, ``C for Java Programmers'', Addison-Wesley, 2000. Provides
an introduction to C.
Sobell, ``A Practical Guide to the Unix System'', Addison Wesley,
1995. Many students enter the course not being thoroughly familiar
with Unix.
Prepared by Scott Brandt, 10/02
(sourced from /cse/classes/cmps013/description.txt)

