代写C++代码 代做C++程序 C++辅导 C++教学

C++网络家教 远程写代码 在线Debug 讲解答疑 不是中介,本人直接写

微信: ittutor QQ: 14061936 Email: ittutor@qq.com

导航

 

We have created some scripts that can automatically run your program against some tests. To run these tests you can execute the dry run program with an argument that corresponds to the lab and week, i.e. lab07 for this week. It expects to find all the programs to be submitted as part of this lab in the current directory. You can use dry run as follows:

prompt$ ~cs1921/bin/dryrun lab07

or specific tests (e.g. test #2) as follows:

prompt$ ~cs1921/bin/dryrun lab07 2

Exercises

  1. Write a program called llsum.c that uses a linked list to sum a stream of data on stdin. Your program should call functions to build the linked list, to print the list, to add the data stored in the list and finally to free the list.

    Numbers stored in the linked list should be summed with a function of prototype:

    int sumList(NodeT *head);

    which returns the sum of the nodes in the list

    Below is shown a number of testcases:

    • If a data file sum1.dat contains the numbers 4 10 20 30 40 (notice that the first number is the size of the data) then execution results in:

    • prompt$ ./llsum < sum1.dat
      Linked list = 10->20->30->40
      Total = 100
    • The data file sum2.dat consisting of 9 111 22 3333 4 5555555 666 7777 88 999999 results in:

    • prompt$ ./llsum < sum2.dat
      Linked list = 111->22->3333->4->5555555->666->7777->88->999999
      Total = 6567555
    • The data file sum3.dat consisting of 1 23 results in:

    • prompt$ ./llsum < sum3.dat
      Linked list = 23
      Total = 23
    • If there are not enough numbers on stdin, for example if the data file sum4.dat consists of 3 1 2, then the result is:

    • prompt$ ./llsum < sum4.dat
      Data missing
    • If the first data is not numerical, for example if the data file sum5.dat consists of xx 1, then the result is:

    • prompt$ ./llsum < sum5.dat
      No data
    • Finally, if the data file sum6.dat is empty, then:

    • prompt$ ./llsum < sum6.dat
      No data
  2. Using the program from the previous exercise as starting point, write a program called llord.c that creates a linked list from a stream of data on stdin and indicates whether the linked list is in ascending order or not.

    The order of the data in the linked list should be checked with a function of prototype:

    int isOrderedList(NodeT *head);

    which returns 1 if the linked list is ordered, otherwise 0

    You may assume that the data is numerical. Nodes that have the same value are considered to be ordered. Examples of use are shown below.

    • For the input 4 10 20 30 40 the output is:

    • Linked list = 10->20->30->40
      List is ordered
    • For the input 12 23 35 213 342 444 456 711 865 912 1000 1001 1234 the output is:

    • Linked list = 23->35->213->342->444->456->711->865->912->1000->1001->1234
      List is ordered
    • For the input 12 23 35 213 342 444 445 611 865 864 1000 1001 1234 the output is:

    • Linked list = 23->35->213->342->444->445->611->865->864->1000->1001->1234
      List is unordered
    • For the input 1 78 the output is:

    • Linked list = 78
      List is ordered
    • The final testcase is, if there is no input data then there should be no output.

  3. Using either of the programs from the two previous exercises as starting point, write a program called lltrip.c that indicates whether a stream of data on stdin contains a triplet. A triplet is a consecutive group of 3 nodes that all contain the same data.

    The linked list should be checked for triplets with a function of prototype:

    int hasTripList(NodeT *head);

    which returns 1 if the linked list contains a triplet, otherwise 0

    You may assume that the data is numerical. Examples of use are shown below.

    • For the input 6 10 20 30 30 30 40 the output is:

    • Linked list = 10->20->30->30->30->40
      List contains triplets
    • For the input 7 13 29 38 39 50 50 50 the output is:

    • Linked list = 13->29->38->39->50->50->50
      List contains triplets
    • For the input 4 100 100 100 100 the output is:

    • Linked list = 100->100->100->100
      List contains triplets
    • For the input 2 100 100 the output is:

    • Linked list = 100->100
      List contains no triplets
    • For the input 10 33 6 6 12 2 2 38 39 50 50 the output is:

    • Linked list = 33->6->6->12->2->2->38->39->50->50
      List contains no triplets
    • Finally, if there is no input data then there should be no output.

  4. Write a program called llinserth.c that uses the insert at the tail and head functions to build a linked list of strings from user input. You should call only the functions:

    Further, a linked-list node should have the following structure:

    typedef struct _Node {
       char *data;   // a pointer to data
       struct _Node *next;
    } NodeT;

    The program builds a linked list consisting of character strings from user input. The user is prompted to enter a string with the message "Enter a string: ". Each string that the user enters is inserted into the linked list, but in a special way:

     

     

    The user terminates the session with a full stop (which is stored at the very end of the list, unless no other data was input). On termination the program generates the message "Finished: list is " followed by the contents of the linked list. If the user has entered no data, then the message is simply "Finished".

    Note:

    Some sample testcases are shown below:

    prompt$ ./llinserth
    Enter a string: 1234
    Enter a string: abcd
    Enter a string: .
    Finished: list is abcd->1234->.
    prompt$ ./llinserth
    Enter a string: 12
    Enter a string: O'CLOCK
    Enter a string: .
    Finished: list is O'CLOCK->12->.
    prompt$ ./llinserth
    Enter a string: 1dog
    Enter a string: $500
    Enter a string: #1
    Enter a string: A987
    Enter a string: a654
    Enter a string: .
    Finished: list is a654->A987->1dog->$500->#1->.
    prompt$ ./llinserth
    Enter a string: 7
    Enter a string: parrots
    Enter a string: and
    Enter a string: 3
    Enter a string: kangaroos
    Enter a string: eating
    Enter a string: 12
    Enter a string: biscuits
    Enter a string: .
    Finished: list is biscuits->eating->kangaroos->and->parrots->7->3->12->.
    prompt$ ./llinserth
    Enter a string: 123456789012345678901234567890123456789012345678901234567890
    Enter a string: .
    Finished: list is 123456789012345678901234567890123456789012345678901234567890->.

    If the user provides no data, then no list is output:

    prompt$ ./llinserth
    Enter a string: .
    Finished
    • (note that this will reverse the order of the strings at the head)

    • you may use a fixed-length array to read the user-entered string

    • you may assume there are no blanks in the string

    • the strings may be inserted at the head or the tail in the order they are entered

    • NodeT *insertHead(NodeT *, char *)

    • NodeT *insertTail(NodeT *, char *)

    • NodeT *makeNode (char *)

    • void printList(NodeT *head)

    • void freeList(NodeT *head)

    1. if the first character of the string is a lower or upper case alphabetic character, then the string is inserted at the head of the list

    2. all other strings are inserted at the tail of the list

Submit your work using:

相关推荐