这个project是用C语言创建StringList ADT的实现并进行测试
CIS 212 Project 5
Creating and using an ADT
Due at 8:00pm on Monday, 11 May 2020
This project requires you to create an implementation of a StringList ADT and to test that
implementation by creating a program that prints out the lines read from standard input in
reverse order on standard output.
1
Requirements
1.1stringlist.c
You are to implement the StringList ADT defined by the following interface, stringlist.h:
#
#
/
ifndef _STRINGLIST_H_
define _STRINGLIST_H_
*
*
*
interface to a StringList ADT
/
#
define DEFAULT_CAPACITY 50L /* default initial capacity */
typedef struct stringlist StringList;
/* define synonym */
const StringList *StringList_create(long capacity); /* use default if 0 */
struct stringlist {
void *self;
/
*
*
*
destroy the StringList, invoking free() on each element
void (*destroy)(const StringList *sl);
/
/
*
*
*
*
append string (allocated from the heap) to the StringList
grow the capacity of the list, if necessary
/
/
int (*append)(const StringList *sl, char *s);
retrieve string at `index’ from the StringList
int (*get)(const StringList *sl, long index, char **sptr);
/
/
*
*
*
*
*
*
*
return the number of strings in the list, N;
legal indices: 0 <= index < N
/
long (*size)(const StringList *sl);
}
#
;
endif /* _STRINGLIST_H_ */
You must create the file stringlist.hin your project 5 directory, and enter the above text.
–
1-
CIS 212 Project 5
1.2 reverse.cusing the StringList ADT
You are to write reverse.c; this code, when linked with stringlist.o, reads each line
from standard input, appending a copy of that line to a StringList. After detecting end of file on
standard input, it prints out the lines stored in the StringList from last to first.
The pseudocode for reverse.cis as follows:
include necessary files
main()
create a StringList
if failure
print error message
terminate program
while there is a next line
duplicate the line on the heap
append the duplicate to the StringList
if append fails
print error message
cleanup and terminate
set N to number of strings in the StringList
for i = N-1 downto 0
get string at index i
print string
destroy the StringList
2
Starting files
In Canvas, in Files/Projects, you will find a gzipped tar archive named P5start.tgz; this file
contains the following files:
•
•
•
•
small.in– a file that contains a small number of lines as input to reverse.
medium.in– file that contains a medium number of lines as input to reverse.
large.in– file that contains a large number of lines as input to reverse
small.out– the correct output that should result when executing
./reverse <small.in
•
•
•
medium.out– the correct output that should result when executing
./reverse <medium.in
large.out– the correct output that should result when executing
./reverse <large.in
template.c– a template file that you must rename to stringlist.cand flesh
out with your implementation of a StringList.
–
2-
CIS 212 Project 5
3
You will submit your solutions electronically by uploading a gzipped tar archive2 via Canvas.
Submission1
Your TGZ archive should be named <duckid>-project5.tgz, where <duckid>is your
3
“
duckid” . It should contain your files stringlist.c, reverse.c, and your Makefile; it
should also contain a file named report.txt; this file should contain your name, duckid, the
names of any classmates who helped you and what assistance they provided, and the current
state of your solution. Do not include any other files in the archive.
1 If you do not follow these submission instruction, I will NOT mark your submission and you will receive a 0 for
the project.
2 See section 7 of Canvas/Files/Projects/P1Handout.pdf for instructions if you do not remember how to create a
gzipped tar archive. Obviously, the filenames used for this project will be different.
3 Your duckid is your uoregon.edu email address, without the @uoregon.edu; for example, my duckid is jsventek. It
is most particularly not your UOID, which is a 9-digit number that starts with “95”.
–
3-
CIS 212 Project 5
Grading Rubric
Your submission will be marked on a 50 point scale. Substantial emphasis is placed upon
WORKING submissions, and you will note that a large fraction of the points are reserved for this
aspect. It is to your advantage to ensure that whatever you submit compiles, links, and runs
correctly. The information returned to you will indicate the number of points awarded for the
submission.
You must be sure that your code works correctly on the virtual machine under VirtualBox,
regardless of which platform you use for development and testing. Leave enough time in your
development to fully test on the virtual machine before submission.
The marking scheme is as follows:
Points
5
Description
Your report – honestly describes the state of your submission
reverse
reverse.c successfully compiles
reverse.c compiles with no warnings
The link phase to create reverse with my stringlist.o is successful
The link phase to create reverse with my stringlist.o is successful with no warnings
reverse works correctly with small.in
1
1
1
1
1
1
1
2
3
3
6
reverse works correctly with medium.in
reverse works correctly with large.in
reverse works correctly with unseen medium-sized input file (ꢀ ≈ 104)
6
reverse works correctly with unseen large-sized input file (ꢀ ≈ 10 )
valgrind reports no memory leaks or errors
The code could have worked with minor modification to the source.
StringList
2
1
1
2
2
5
stringlist.c successfully compiles
stringlist.c compiles with no warnings
Link with my reverse.o is successful
The resulting program works correctly with medium.in
The resulting program works correctly with large.in
valgrind reports no memory leaks or errors
The code could have worked with minor modification to the source.
1
1
Note that:
•
Your report needs to be honest. Stating that everything works and then finding that it
doesn’t is offensive. The 5 points associated with the report are probably the easiest 5
points you will ever earn as long as you are honest.
•
The points for “could have worked” is the maximum awarded in this category; your
mark in this category may be lower depending upon how close you were to a working
implementation.
-1-