DEVELOP/C++ 2006. 8. 17. 11:02



#include <iostream>
using namespace std;

class que
{
struct Node
{
int value;
struct Node * b_add;
struct Node * n_add;
};
public:
Node * nd_f;
Node * nd_r;

int items,mx_items;

que();
//  que(que & q);

void q_ipt();
void q_opt();
void ud_flow();
void ov_flow();
void q_view();
//  struct Node * mk_nd();
//  Node * mk_nd();
};

que::que()
{
items=0;
// Node * nd;
// nd=mk_nd();
Node * nd=new Node;
nd_f=nd_r=nd;
nd->b_add=NULL;
nd->n_add=NULL;
}
/*
struct Node * que::mk_nd()
{
Node * nd=new Node;
// struct Node * nd=new Node;
return nd;
}
*/
void que::q_ipt()
{
int temp;  //값 임시저장소
Node * temp_a; //주소임시저장소
// Node * nd;  //주소기본저장소
//오버플로어 처리
cin>>temp;
nd_r->value=temp;
temp_a=nd_r;

// nd_r++;//다른방법?
// nd=mk_nd();
Node * nd=new Node;
nd_r=nd;

nd_r->b_add=temp_a;
nd_r->n_add=NULL;
temp_a->n_add=nd_r;

cout<<temp_a<<"("<<temp<<")값이 들어왔습니다."<<endl;
cout<<nd_r->n_add<<endl;
}
void que::q_opt()
{
int temp;  //값 임시저장소
Node * temp_a; //주소임시저장소
if (nd_r==nd_f) ud_flow();
else
{
temp=nd_f->value;
temp_a=nd_f;
nd_f=nd_f->n_add;

nd_f->b_add=NULL;
temp_a->n_add=NULL;

cout<<"나온 값은 "<<temp<<"입니다."<<endl;
}
// if (nd_r==nd_f) cout<<"큐가 비었습니다."<<endl;
}
void que::ud_flow()
{
cout<<"큐가 비었습니다."<<endl;
}
void que::ov_flow()
{
cout<<"큐가 가득 찼습니다."<<endl;
}
void que::q_view()
{
cout<<"큐의 값을 출력합니다."<<endl;
// cout <<nd_r<<nd_f<<nd_r-nd_f<<endl;
Node * temp_a; //주소임시저장소
temp_a=nd_f;
while(temp_a->n_add)
{
cout<<temp_a->value<<endl;
temp_a=temp_a->n_add;
}
//view();
}

int main()
{
que c_q;

int work, bk_k;
while(1)
{
cin>>work;
switch(work)
{
case 1:
  c_q.q_ipt();
  break;
case 2:
  c_q.q_opt();
  break;
case 3:
  c_q.q_view();
  break;
default:
  bk_k=-1;
}
if (bk_k==-1) break;
}
return 0;
}

AND