Corning Community College
CSCS2320 Data Structures
~~TOC~~
This section will document any updates applied to the project since original release:
In this project, we get started with some course initialization and review activities.
You're reading this, so you've likely already found your way to the course homepage. It consists of the syllabus plus additional course resources.
Please familiarize yourself with it, bookmarking important resources as appropriate, so that you can refer back when needed.
I'd recommend knowing how to get to the projects page (where you found the link for this project), as new content will be posted there.
Be sure to read through and over the syllabus, ensuring there are no questions on the material and organization of the course.
Familiarize yourself with your Journal, and once there:
NOTE: Week 1 journal entry will be due before Monday of week2, the remainder of the intro Journal content will be due by this project's deadline.
Using the resources found on the course homepage (or the lab46 website in general), locate and subscribe a preferred and frequently checked e-mail address to the class mailing list (known as DATA).
We will use this for class discussions (along with irc, the notes wiki page, your Journal, etc.) and to disseminate announcements and other information.
Once subscribed, please send a message to the list introducing yourself (also so I can know to associate a particular e-mail address with you).
Using the tutorial, set up a screen session and join the #csci channel on irc. This has proven useful for more interactive (debugging!) conversations.
Additionally, the C/C++ Programming students will be on this channel, so you could further review your C skills by helping them out.
Ensure you can still (or if you are new to this, that you can successfully) log into lab46 via an ssh or mosh client.
Lab46 will be the primary and supported development environment for the course. While you are free to use your own systems for any projects not intimately tied to Lab46 or the LAIR, any assigned projects:
Remember, during open LAIR times you can always come in and use the pods.
NOTE that many of the projects in this class are heavily tied into Lab46, so you'll want to get used to using it as a development platform.
To both aid you and help you develop better development skills, I'd like for you to make regular commits and pushes to your Lab46 mercurial repository.
This way, you can have a regular snapshot of your work as you go along, plus have the ability to grab an older copy should something go wrong.
Like the Journal, I will be looking for a minimal amount of repository-related activity PER WEEK (for example, I will be looking for AT LEAST 1 commit in relation to your program for week 1).
As a means of simultaneous review, along with starting to acclimate ourselves to new concepts that we'll be encountering on a regular basis, I'd like for you to implement a program (in C) that does the following:
====dsi0==== 0. build list 1. display list forward 2. display list backward 3. insert into list 4. append into list 5. obtain from list 6. clear list 7. quit >>>
>>> 0 enter value (-1 to finish): 2 enter value (-1 to finish): 4 enter value (-1 to finish): 6 enter value (-1 to finish): 8 enter value (-1 to finish): -1
====dsi0==== 0. build list 1. display list forward 2. display list backward 3. insert into list 4. append into list 5. obtain from list 6. clear list 7. quit >>> 1 [0] 2 -> [1] 4 -> [2] 6 -> [3] 8 -> [4] -1
====dsi0==== 0. build list 1. display list forward 2. display list backward 3. insert into list 4. append into list 5. obtain from list 6. clear list 7. quit >>> 2 [4] -1 -> [3] 8 -> [2] 6 -> [1] 4 -> [0] 2
====dsi0==== 0. build list 1. display list forward 2. display list backward 3. insert into list 4. append into list 5. obtain from list 6. clear list 7. quit >>> 3 Enter index to insert before: 2 Enter value to insert into list: 5
If you were to display the list (forward) after doing this insert, you should have: 2 4 5 6 8 (we inserted the 5 before the current element 2 (containing the 6)).
====dsi0==== 0. build list 1. display list forward 2. display list backward 3. insert into list 4. append into list 5. obtain from list 6. clear list 7. quit >>> 4 Enter index to append after: 3 Enter value to append into list: 7 ====dsi0==== 0. build list 1. display list forward 2. display list backward 3. insert into list 4. append into list 5. obtain from list 6. clear list 7. quit >>> 1 [0] 2 -> [1] 4 -> [2] 5 -> [3] 6 -> [4] 7 -> [5] 8 -> [6] -1
====dsi0==== 0. build list 1. display list forward 2. display list backward 3. insert into list 4. append into list 5. obtain from list 6. clear list 7. quit >>> 5 Enter index to obtain: 3 The value you obtained is: 6 ====dsi0==== 0. build list 1. display list forward 2. display list backward 3. insert into list 4. append into list 5. obtain from list 6. clear list 7. quit >>> 1 [0] 2 -> [1] 4 -> [2] 5 -> [3] 7 -> [4] 8 -> [5] -1
The menu:
====dsi0==== 0. build list 1. display list forward 2. display list backward 3. insert into list 4. append into list 5. obtain from list 6. clear list 7. quit
and prompt (note the trailing space after “»> ”):
>>>
are to go to STDERR, and NOT STDOUT. The output from running the various menu options is to go to STDOUT.
The display option arrows are to take the form “ → ” (note the single space padded both before and after).
The index value is enclosed in square brackets (first one flush against left margin), followed by a space, then the array element (then the padded display arrow).
These output specifications play important roles, from facilitated program evaluation to testing how well you can code according to specifications (the latter a very important development skill to have).
I may have been more lax in C, but here in Data Structures precision and conformance to requirements will be increasingly important (not only for the scope of the project, but for your own sanity as deviating from it will likely make things far more difficult for you in implementation). Might seem a bit nitpicky, and on some level it is… but on others, a very important learning opportunity for the types of things you'll be encountering in the future.
In addition to writing this program, please be sure you brush up on (at least) the following:
When your program is functional, you can test it for correctness by using the projeval tool on lab46. A series of tests will be run, and you will be able to see if you program is in spec (SUCCESS) or out of spec (MISMATCH).
An example of a fully compliant test run follows:
lab46:~/src/data/dsi0$ projeval dsi0program [projeval] Evaluating dsi0 for username [test 0] display 4 element populated list forward ... you have: [0] 2 -> [1] 4 -> [2] 6 -> [3] 8 -> [4] -1 should be: [0] 2 -> [1] 4 -> [2] 6 -> [3] 8 -> [4] -1 Result: SUCCESS! [test 1] inserting into empty list ... you have: [0] 7 -> [1] -1 should be: [0] 7 -> [1] -1 Result: SUCCESS! [test 2] appending into empty list ... you have: [0] 7 -> [1] -1 should be: [0] 7 -> [1] -1 Result: SUCCESS! [test 3] obtaining from 1 entry list ... you have: The value you obtained is: 7 should be: The value you obtained is: 7 Result: SUCCESS! [test 4] obtaining first entry from 2 entry list ... you have: The value you obtained is: 7 should be: The value you obtained is: 7 Result: SUCCESS! [test 5] obtaining second entry from 2 entry list ... you have: The value you obtained is: 8 should be: The value you obtained is: 8 Result: SUCCESS! [test 6] inserting before first entry in list ... you have: [0] 6 -> [1] 7 -> [2] -1 should be: [0] 6 -> [1] 7 -> [2] -1 Result: SUCCESS! [test 7] inserting before second entry in list ... you have: [0] 7 -> [1] 8 -> [2] 9 -> [3] -1 should be: [0] 7 -> [1] 8 -> [2] 9 -> [3] -1 Result: SUCCESS! [test 8] appending after last entry in list ... you have: [0] 7 -> [1] 8 -> [2] 9 -> [3] -1 should be: [0] 7 -> [1] 8 -> [2] 9 -> [3] -1 Result: SUCCESS! [test 9] appending after second to last entry in list ... you have: [0] 7 -> [1] 8 -> [2] 9 -> [3] -1 should be: [0] 7 -> [1] 8 -> [2] 9 -> [3] -1 Result: SUCCESS! [test 10] clearing list then appending ... you have: [0] 7 -> [1] -1 should be: [0] 7 -> [1] -1 Result: SUCCESS! [test 11] obtaining second entry from 2 entry list (check list integrity) ... you have: [0] 7 -> [1] -1 should be: [0] 7 -> [1] -1 Result: SUCCESS! [test 12] obtaining first entry from 2 entry list (checking list integrity) ... you have: [0] 8 -> [1] -1 should be: [0] 8 -> [1] -1 Result: SUCCESS! [test 13] obtaining from 1 entry list (checking list integrity) ... you have: [0] -1 should be: [0] -1 Result: SUCCESS! lab46:~/src/data/dsi0$
To be successful in this project, the following criteria must be met:
Let's say you have completed work on the project, and are ready to submit, you would do the following (assuming you have a program called arraylist.c):
lab46:~/src/data/dsi0$ submit data dsi0 arraylist.c Submitting data project "dsi0": -> arraylist.c(OK) SUCCESSFULLY SUBMITTED lab46:~/src/data/dsi0$