Serry A.

asked • 04/18/21

This needs to be done in C programming.

Modify the C Program Linked List given below to create a queue. The same functions for adding, removing and printing nodes should be present.

EXTRA: Include print statements to explain what is happening in the queue as the functions are running.


#include <stdio.h>

#include <stdlib.h>

struct listNode {

       char data;

       struct listNode *nextPtr;

typedef struct listNode ListNode;

typedef ListNode *ListNodePtr;


void insert( ListNodePtr *sPtr, char value );

char delete( ListNodePtr *sPtr, char value );

int isEmpty( ListNodePtr sPtr );

void printList( ListNodePtr currentPtr );

void instructions( void );


int main( void )

{

  ListNodePtr startPtr = NULL;

  int choice;

  char item;

   

  instructions();

  printf( "? " );

  scanf( "%d", &choice );



  while ( choice != 3 ) {

    switch ( choice ) {

      case 1:

        printf( "Enter a character: " );

        scanf( "\n%c", &item );

        insert( &startPtr, item );

        printList( startPtr );

        break;

       case 2:


        if ( !isEmpty( startPtr ) ) {

          printf( "Enter character to be deleted: " );

          scanf( "\n%c", &item );


          if ( delete( &startPtr, item ) ) {

            printf( "%c deleted.\n", item );

            printList( startPtr );

          }

          else {

            printf( "%c not found.\n\n", item );

          }

        }

        else {

          printf( "List is empty.\n\n" );

        }


        break;

      default:

         printf( "Invalid choice.\n\n" );

         instructions();

         break;

         }


    printf( "? " );

    scanf( "%d", &choice );

}


  printf( "End of run.\n" );

  return 0;

   }



void instructions( void )

{

  printf( "Enter your choice:\n"

     " 1 to insert an element into the list.\n"

     " 2 to delete an element from the list.\n"

     " 3 to end.\n" );

}


  

void insert( ListNodePtr *sPtr, char value )

{

  ListNodePtr newPtr = malloc( sizeof( ListNode ) );

  if ( newPtr != NULL ) {

    newPtr->data = value;

    newPtr->nextPtr = NULL;


    ListNodePtr previousPtr = NULL; 

    ListNodePtr currentPtr = *sPtr;


    while ( currentPtr != NULL && value > currentPtr->data ) {

      previousPtr = currentPtr;

      currentPtr = currentPtr->nextPtr;

    }


    if ( previousPtr == NULL ) {

      newPtr->nextPtr = *sPtr;

      *sPtr = newPtr;

    }

    else {

      previousPtr->nextPtr = newPtr;

      newPtr->nextPtr = currentPtr;

      } /* end else */

  }

  else {

    printf( "%c not inserted. No memory available.\n", value );

  }

}



char delete( ListNodePtr *sPtr, char value )

{

  /* delete first node */

  if ( value == ( *sPtr )->data ) {

    ListNodePtr tempPtr = *sPtr;

    *sPtr = ( *sPtr )->nextPtr;

    free( tempPtr );

    return value;

   }

   

  else {

    ListNodePtr previousPtr = *sPtr;

    ListNodePtr currentPtr = ( *sPtr )->nextPtr;


 

   while ( currentPtr != NULL && currentPtr->data != value ) {

     previousPtr = currentPtr;

     currentPtr = currentPtr->nextPtr;

   }


   if ( currentPtr != NULL ) {

     ListNodePtr tempPtr = currentPtr;

     previousPtr->nextPtr = currentPtr->nextPtr;

     return value;

    }

   }


   return '\0';

}



int isEmpty( ListNodePtr sPtr )

{

  return sPtr == NULL;

}



void printList( ListNodePtr currentPtr )

{


  if ( currentPtr == NULL ) {

    printf( "List is empty.\n\n" );

   }

  else {

    printf( "The list is:\n" );



  while ( currentPtr != NULL ) {

    printf( "%c --> ", currentPtr->data );

    currentPtr = currentPtr->nextPtr;

   }

  printf( "NULL\n\n" );

   }

}


1 Expert Answer

By:

Patrick B. answered • 04/19/21

Tutor
4.7 (31)

Math and computer tutor/teacher

Still looking for help? Get the right answer, fast.

Ask a question for free

Get a free answer to a quick problem.
Most questions answered within 4 hours.

OR

Find an Online Tutor Now

Choose an expert and meet online. No packages or subscriptions, pay only for the time you need.