#pragma once
#include <iostream>
#include <stdlib.h>
class node
{
private :
int cardnumber;
char cardshape;
node* pNext;
public :
void Setcardnumber(int number);
int Getcardnumber();
void Setcardshape(char shape);
char Getcardshape();
void SetpNext(node* next);
node* GetpNext();
};
#include "node.h"
int node::Getcardnumber()
{
return rand()%13+1;
}
void node::Setcardnumber(int number)
{
cardnumber = number;
}
char node::Getcardshape()
{
switch(rand()%4)
{
case 0:
return 'a';
case 1:
return 'b';
case 2:
return 'c';
case 3:
return 'd';
}
}
void node::Setcardshape(char shape)
{
cardshape = shape;
}
void node::SetpNext(node* next)
{
pNext = next;
}
node* node::GetpNext()
{
return pNext;
}
#pragma once
#include "node.h"
class queue
{
public :
int size;
node* front;
node* rear;
queue();
void push(queue** q);
void pop(queue** q);
int isempty(queue* q);
int isfull(queue* q,int Size);
void printnode(queue* q);
void edit(queue** q);
};
#include "queue.h"
#include "node.h"
using namespace std;
queue::queue()
{
front=NULL;
rear=NULL;
size=0;
}
void queue::push(queue** q)
{
node* newnode;
newnode=new node;
newnode->Setcardnumber(newnode->Getcardnumber());
newnode->Setcardnumber(newnode->Getcardshape());
newnode->SetpNext(NULL);
if(isempty(*q))
{
(*q)->front=newnode;
(*q)->rear=newnode;
}
else
{
(*q)->rear->SetpNext(newnode);
(*q)->rear=newnode;
}
(*q)->size++;
}
int queue::isempty(queue* q)
{
if(q->size==0)
return 1;
else
return 0;
}
int queue::isfull(queue* q,int Size)
{
if(q->size==Size)
return 1;
else
return 0;
}
void queue::pop(queue** q)
{
node* temp=(*q)->front;
(*q)->front=(*q)->front->GetpNext();
delete temp;
(*q)->size--;
}
void queue::printnode(queue* q)
{
node* temp;
for(temp=q->front;temp!=NULL;temp=temp->GetpNext())
{
switch(temp->Getcardshape())
{
case 'a':
cout<<"♣";
cout<<temp->Getcardnumber()<<" / ";
continue;
case 'b':
cout<<"♥";
cout<<temp->Getcardnumber()<<" / ";
continue;
case 'c':
cout<<"◆";
cout<<temp->Getcardnumber()<<" / ";
continue;
case 'd':
cout<<"♠";
cout<<temp->Getcardnumber()<<" / ";
continue;
}
}
cout<<endl;
}
void queue::edit(queue** q)
{
node* temp=(*q)->rear;
node* temp2;
if((*q)->front==(*q)->rear)
{
return;
}
else
{
for(temp2=(*q)->front;temp2->GetpNext()!=NULL;temp2=temp2->GetpNext())
{
while(temp->Getcardnumber()==temp2->Getcardnumber() && temp->Getcardshape()==temp2->Getcardshape())
{
temp->Setcardnumber(temp2->Getcardnumber());
temp->Setcardshape(temp2->Getcardshape());
}
}
}
}
#include <time.h>
#include "node.h"
#include "queue.h"
using namespace std;
void main()
{
int Size,opt;
queue* q = new queue;
srand((unsigned int)time(NULL));
cout<<"Queue Size : ";
cin>>Size;
while(1)
{
cout<<"1. Generate a card"<<endl;
cout<<"2. Delete a card"<<endl;
cout<<"3. Show all cards"<<endl;
cout<<"4. End "<<endl;
cin>>opt;
switch(opt)
{
case 1:
if(q->isfull(q,Size))
{
cout<<"Error!! Full!!"<<endl;
break;
}
q->push(&q);
q->edit(&q); // 중복 카드 방지
break;
case 2:
if(q->isempty(q))
{
cout<<"Error!! Empty!!"<<endl;
break;
}
q->pop(&q);
break;
case 3:
q->printnode(q);
break;
case 4:
return;
}
}
}