In: Computer Science
In this lab, using C++, you will create two data structures: a stack and a queue. You will use STL containers to demonstrate basic ADTs.
Queue
For the queue, you will simulate a buffer. Remember it is
first-in-first-out. The user will enter a number for the number of
rounds to run your simulation. You need one function that randomly
generates a number. You will also have a user specified percentage,
and the function uses this percentage to randomly put the generated
number in the buffer. For example, if the user enters 25, then
there is a 25% chance of the randomly generated number been put
into the queue. You will have another user specified percentage,
which is the chance of a value being removed from the buffer. For
example, if the user enters 50, then there is a 50% chance of the
number in the buffer been removed in this round.
You need to record the length of the queue in each round. After
each round of the simulation, calculate and display the average
length of the queue. Equation to calculate the average length would
be: ALi = (ALi-1 * (i-1) + Li ) / i, where ALi and ALi-1 are the
average length in the ith and i-1th round and Li is queue length in
the ith round. Does your buffer behave as expected, i.e. get longer
if the input chance is greater, and get shorter if the removing
chance is greater? Your program needs to handle the situation when
the queue is empty and still try to remove a value. You can start
the simulation with a queue of certain length.
Stack
Use a stack to create a function that creates a palindrome, i.e. a
string that is the same forwards and backwards. It does not need to
be an actual word. The function will receive a string from user
input and it will return the string with the palindrome. For
example, if you enter a string “abc”, your program will return
“abccba”.
Testing program
Create a menu program for the user to test your buffer and to
create a palindrome. For the queue, prompt the user to enter the
two chances and the total number of rounds. Display the results to
the screen in each round. For the stack, prompt them to enter a
string. Create the palindrome and then display it. You can
determine how this menu program should look like as long as it test
the queue and stack properly
What to submit
Code to implement your stack, both header and source files
Code to implement your queue, both header and source files
Code to test the operation of your stack and queue.
#include <queue>
#include <stack>
#include <time.h>
#include<iostream>
#include <string>
using namespace std;
int RandomNumber()
{
srand (time(NULL));
return rand() % 100 + 1;
}
void QueueGame()
{
queue<int> buffer;
int simulations;
cout<<"Enter number of simulations:";
cin>>simulations;
int a=0; //avg lenght in ith round
int b=0; //avg lenght in i-1 th round
//fill the buffer with some initial data.
for( int i = 1; i <= 25; i++)
{
buffer.push(i);
}
for( int i = 1; i <= simulations; i++)
{
int push,pop;
cout<<"Enter Push %:";
cin>>push;
cout<<endl<<"Enter
Pop %:";
cin>>pop;
int random = RandomNumber()
;
if ( random <= push )
{
buffer.push(random);
}
if ( random <= pop )
{
if
(buffer.size() == 0)
{
cout<<"Buffer is empty!!";
}
else
buffer.pop();
}
a = ( b * (i-1));
a += buffer.size() ;
a/= i;
cout <<endl<<"Average
Length in Round "<<i<<" is
"<<a<<endl;
b = a;
}
}
void StackGame()
{
string str;
cout<<"Enter a string to make it
pallindrome:";
getline(cin,str);
getline(cin,str);
stack<char> bucket;
for( int i=0; i<str.length(); i++)
{
bucket.push(str[i]);
}
string reverse;
//print reverse
for( int i=0; i<str.length(); i++)
{
reverse += bucket.top();
bucket.pop();
}
cout<<"Pallindrome:"<<str<<reverse<<endl;
}
void main()
{
int game_num;
bool choice = false;
do {
cout<< "\n\n1. Queue \n2.
Stack\nEnter your choice:";
cin>>game_num;
switch (game_num)
{
case 1: QueueGame();
break;
case 2: StackGame();
break;
}
cout<<"Play again? (0 = No, 1
= Yes): ";
cin>>choice;
}
while(choice);
}