Question

In: Computer Science

C Programme Time limit: 5000ms Memory limit: 256mb Description: Given a series of queue operations, please...

C Programme 
Time limit: 5000ms
Memory limit: 256mb

Description:
Given a series of queue operations, please complete the queue ADT to output for respective operations.

-------------------------Copy the following code, complete it and submit-------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef enum {enqueue = 1, dequeue, end, isfull, isempty} Operation;

struct Queue {
    int * arr;
    int capacity;
    int front;
    int rear;
};

struct Queue * Create(int capacity) {
    struct Queue * queue = (struct Queue *)malloc(sizeof(struct Queue));
    queue->arr = (int*)malloc(sizeof(int) * capacity);
    queue->capacity = capacity;
    queue->front = 0;
    queue->rear = 0;
    return queue;
}

int IsFull(struct Queue * queue) {
    // write your code here
}

int IsEmpty(struct Queue * queue) {
    // write your code here
}

int Enqueue(struct Queue * queue, int x) {
    // write your code here
}

int Dequeue(struct Queue * queue) {
    // write your code here
}

Operation Getop() {
    char str[10];
    scanf("%s", str);
    if (strcmp(str, "Enqueue") == 0) {
        return 1;
    }
    else if (strcmp(str, "Dequeue") == 0) {
        return 2;
    }
    else if (strcmp(str, "End") == 0) {
        return 3;
    }
    else if (strcmp(str, "Isfull") == 0) {
        return 4;
    }
    else if (strcmp(str, "Isempty") == 0) {
        return 5;
    }
    else {
        return 0;
    }
}

void printArray(struct Queue * queue) {
    int curr;
    curr = queue->front;
    if (!IsEmpty(queue)){
        while((curr+1)%queue->capacity != queue->rear){
            printf("%d ", queue->arr[curr]);
            curr = (curr + 1)%queue->capacity;
        }
        printf("%d\n", queue->arr[curr]);
    }
}

int main(void) {
    int X;
    int capacity;
    struct Queue * queue;
    int flag = 0;

    scanf("%d", &capacity);
    queue = Create(capacity);
    while (!flag) {
        switch(Getop()) {
            case enqueue:
                scanf("%d", &X);
                if (Enqueue(queue, X) == 1e5) {
                    printf("Queue is full\n");
                }
                break;
            case dequeue:
                X = Dequeue(queue);
                if (X == 1e5) {
                    printf("Queue is empty\n");
                }
                break;
            case end:
                printArray(queue);
                flag = 1;
                break;
            case isfull:
                if (IsFull(queue)){
                    printf("Queue is full\n");
                }
                else{
                    printf("Queue is not full\n");
                }
                break;
            case isempty:
                if (IsEmpty(queue)){
                    printf("Queue is empty\n");
                }
                else{
                    printf("Queue is not empty\n"); 
                }
                break;
        }
    }
    return 0;
}

-------------------------------------------End of Code-------------------------------------------

Input:
The first line is a positive integer N, which denotes the capacity of the queue, followed by M lines of queue operations, each chosen from one of the followings: Enqueue x(an integer), Dequeue, Isfull and Isempty, except the last of which, which is End.

Output:
A line per Dequeue (if queue is empty), Isfull or Isempty operation, each denoting the output of the specified operation, following by a line of remaining elements in the queue from head to tail upon End.

Sample Input 1:
4
Dequeue
Enqueue 1
Enqueue 2
Dequeue
End

Sample Output 1:
Queue is empty
2

Sample Input 2:
2
Isempty
Enqueue 1
Isfull
Enqueue 2
End

Sample Output 2:
Queue is empty
Queue is full
Queue is full
1

Solutions

Expert Solution

Code

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

typedef enum { enqueue = 1, dequeue, end, isfull, isempty } Operation;

struct Queue {

  int * arr;

  int capacity;

  int front;

  int rear;

};

struct Queue * Create(int capacity) {

  struct Queue * queue = (struct Queue *)malloc(sizeof(struct Queue));

  queue->arr = (int*)malloc(sizeof(int) * capacity);

  queue->capacity = capacity;

  queue->front = 0;

  queue->rear = 0;

  return queue;

}

int IsFull(struct Queue * queue) {

  if (queue->rear == queue->capacity-1)

    return 1;

  

  return 0;

}

int IsEmpty(struct Queue * queue) {

  if (queue->rear == 0)

    return 1;

  return 0;

}

int Enqueue(struct Queue * queue, int x) {

  if (IsFull(queue))

    return 100000;

  else

  {

    queue->arr[queue->rear] = x;

    queue->rear++;

  }

return 1;

}

int Dequeue(struct Queue * queue) {

  int val;

  if (IsEmpty(queue))

    return 1e5;

  else

  {

    val = queue->arr[queue->front];

    queue->front++;

  }

  return val;

}

Operation Getop() {

  char str[10];

  scanf("%s", str);

  if (strcmp(str, "Enqueue") == 0) {

    return 1;

  }

  else if (strcmp(str, "Dequeue") == 0) {

    return 2;

  }

  else if (strcmp(str, "End") == 0) {

    return 3;

  }

  else if (strcmp(str, "Isfull") == 0) {

    return 4;

  }

  else if (strcmp(str, "Isempty") == 0) {

    return 5;

  }

  else {

    return 0;

  }

}

void printArray(struct Queue * queue) {

  int curr;

  curr = queue->front;

  if (!IsEmpty(queue)) {

    while ((curr + 1) % queue->capacity != queue->rear) {

      printf("%d ", queue->arr[curr]);

      curr = (curr + 1) % queue->capacity;

    }

    printf("%d\n", queue->arr[curr]);

  }

}

int main(void) {

  int X;

  int capacity;

  struct Queue * queue;

  int flag = 0;

  scanf("%d", &capacity);

  queue = Create(capacity);

  while (!flag) {

    switch (Getop()) {

    case enqueue:

      scanf("%d", &X);

      if (Enqueue(queue, X) == 1e5) {

        printf("Queue is full\n");

      }

      break;

    case dequeue:

      X = Dequeue(queue);

      if (X == 1e5) {

        printf("Queue is empty\n");

      }

      break;

    case end:

      printArray(queue);

      flag = 1;

      break;

    case isfull:

      if (IsFull(queue)) {

        printf("Queue is full\n");

      }

      else {

        printf("Queue is not full\n");

      }

      break;

    case isempty:

      if (IsEmpty(queue)) {

        printf("Queue is empty\n");

      }

      else {

        printf("Queue is not empty\n");

      }

      break;

    }

  }

  return 0;

}

outputs

If you have any query regarding the code please ask me in the comment i am here for help you. Please do not direct thumbs down just ask if you have any query. And if you like my work then please appreciates with up vote. Thank You.


Related Solutions

Time limit: 5000ms Memory limit: 256mb Description: Given a series of stack operations, please complete the...
Time limit: 5000ms Memory limit: 256mb Description: Given a series of stack operations, please complete the stack ADT to output for respective operations. -------------------------Copy the following code, complete it and submit------------------------- #include <stdio.h> #include <stdlib.h> typedef enum {push = 1, pop, end} Operation; typedef struct Node * PtrToNode; struct Node {     int element;     PtrToNode next;     PtrToNode prev; }; typedef struct ListRecord * List; struct ListRecord {     PtrToNode head;     PtrToNode tail; }; List Create() {    ...
C++ language We are given a Queue data structure that supports standard operations like Enqueue() and...
C++ language We are given a Queue data structure that supports standard operations like Enqueue() and Dequeue(): Enqueue(element): add a new element at the tail of the queue; Dequeue(): delete the element at the head of the queue. Show how to implement a stack using two queues. Analyze the running time of the stack operations: Push and Pop.
Description( IN C++) NO TAIL POINTERS!! The purpose of this challenge is to implement a queue...
Description( IN C++) NO TAIL POINTERS!! The purpose of this challenge is to implement a queue using a linked list as a backing data structure Requirements Write the following struct struct JobNode { string name; JobNode * next; }; Create a class called Queue. In this class, create a private variable JobNode * head. This will keep track of the location of the head node. Add the following private function. This function will be used to dynamically create new nodes...
Stack Time Limit : 1 sec, Memory Limit : 131072 KB English / Japanese   Reverse Polish...
Stack Time Limit : 1 sec, Memory Limit : 131072 KB English / Japanese   Reverse Polish notation is a notation where every operator follows all of its operands. For example, an expression (1+2)*(5+4) in the conventional Polish notation can be represented as 1 2 + 5 4 + * in the Reverse Polish notation. One of advantages of the Reverse Polish notation is that it is parenthesis-free. Write a program which reads an expression in the Reverse Polish notation and...
PLEASE DO IN C++ (Math: The Complex class) The description of this project is given in...
PLEASE DO IN C++ (Math: The Complex class) The description of this project is given in Programming Exercise 14.7 in the Chapter 14 Programming Exercise from the Book section. If you get a logical or runtime error, please refer https://liangcpp.pearsoncmg.com/faq.html. Design a class named Complex for representing complex numbers and the functions add, subtract, multiply, divide, abs for performing complex-number operations, and the toString function for returning a string representation for a complex number. The toString function returns a+bi as...
Write a C program to implement the priority queue with the operations insert and extractmax. Sample...
Write a C program to implement the priority queue with the operations insert and extractmax. Sample : ====Menu==== insert extractmax display exit Enter your choice: 1 Input a number: 2 enter any key to go to main menu ====Menu==== insert extractmax display exit Enter your choice: 1 Input a number: 4 enter any key to go to main menu ====Menu==== insert extractmax display exit Enter your choice: 1 Input a number: 6 enter any key to go to main menu...
Round Robin Simulation Description: Write a program in c++ that utilizes STL queue (or your own...
Round Robin Simulation Description: Write a program in c++ that utilizes STL queue (or your own queue implementation) that simulates the round robin process scheduling algorithm. WITH COMMENTS Requirement: - write a class Process that holds following integer information: id, arrival_time, time_needed, finished_time. - read and initiate 5 Process objects from associated file (robin. txt) - file format: id, arrival_time, time_needed - once a process is finished, mark its finished_time accordingly. - CPU time frame: 4. - utilize a queue...
Given a queue of integers, write an algorithm and the program in c++ that, using only...
Given a queue of integers, write an algorithm and the program in c++ that, using only the queue ADT, calculates and prints the sum and the average of the integers in the queue without changing the contents of the queue.
Describe the following terms a) stationary time series b) seasonal time series c) box test (...
Describe the following terms a) stationary time series b) seasonal time series c) box test ( clearly define your notation and the null and alternative hypotheses)
Code in C++ programming language description about read and write data to memory example.
Code in C++ programming language description about read and write data to memory example.
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT