목차
1. 메인 함수
2. 입력받은 문자를 연산자와 피연산자로 구분하여 순서 바꾸고 계산하는 클래스 파일
3. 위의 Token 클래스에서 사용하는 스택 프로그램 파일 (template 과 linked list 이용)
2. 입력받은 문자를 연산자와 피연산자로 구분하여 순서 바꾸고 계산하는 클래스 파일
3. 위의 Token 클래스에서 사용하는 스택 프로그램 파일 (template 과 linked list 이용)
본문내용
로 저장
variable_value[z]=c;
z++;
}
}
}// End of else
}// End of for
cout << "\n\n계산된 값: " << estack.del() << "\n\n";
}// End of eval()
#endif
위의 Token 클래스에서 사용하는 스택 프로그램 파일 (template 과 linked list 이용)
stackh.h
#ifndef STACKH_H // stack 클래스
#define STACKH_H
//---------------------------------------------------------------------
// 설명 : 이 클래스는 노드의 형태를 나타내는 클래스이다.
// 기능 : 하나의 노드를 구성하는 형태로 선언 되어 있다.
//---------------------------------------------------------------------
template
class Node
{
public:
Node();
Type value; // 입력 받는 값을 포인터로 하여 저장한 값을 가리키게 한다.
Node *Next; // 다음 노드를 가리키는 포인터 값
};
template
Node::Node()
{ // 생성자 함수. 변수 초기화
Next=NULL;
}
//----------------------------------------------------------------------
// 설명 : 스택 클래스. 자료를 저장하고 후에 저장한 값을 먼저 빼낸다.
// 기능 : Node 형의 자료를 저장하고 불러온다. 링크드 리스트를 이용한다.
//----------------------------------------------------------------------
template// template로 클래스 선언
class Stack { // stack 클래스
private:
Node *top; // 자료를 저장하고 뺄 top 선언
Node *first;// 첫번째 자료의 위치 기억 포인터
public:
Stack(); // 생성자 함수
bool Isempty();
void add(T x); // stack 값을 저장하는 함수
T del(); // top 의 값을 빼오고 노드를 삭제하는 함수
};
template // 스택이 비어 있는지 확인
bool Stack::Isempty()
{
if (first==NULL)
return true;
else
return false;
}
template
Stack::Stack()// 생성자 함수
{
top=NULL;
first=NULL;
}
//------------------------------------------------------------------
// 기능 : 새로운 데이터를 저장한다.
// 동작 : 새로운 동적 Node 를 생성하여 그곳에 입력한 데이터 저장
//------------------------------------------------------------------
template
void Stack::add(T x) // 데이터 저장 함수
{
if (Isempty()) // first가 NULL이면
{
first= top = new Node;// 새로운 노드 생성 하고 first와 top에 저장
top->value=x; // top value에 입력한 값 저장
top->Next=0; // top Next 에 0저장 하여 마지막 알림
} else {
top->Next = new Node; // 노드가 1개 이상 존재하면 새로운 노드 생성
top = top->Next; // top을 새로 생성된 노드로 이동
top->value=x; // top에 입력값 저장
top->Next=0; // top Next 에 0을 저장하여 마지막 값 알림
}
}
//--------------------------------------------------------------------
// 기능 : 가장 나중에 저장된 데이터를 반환하고 그 Node 를 삭제한다.
// 동작 : top에 저장된 값을 반환하고 top의 주소를 이전 Node 로 바꾼다.
//--------------------------------------------------------------------
template
T Stack::del() // stack 에 저장된 값 반환 및 삭제 함수
{
Node *current; // Node 형 포인터 변수 선언 (현재의 위치 지정 포인터)
Node temp; // Node 형 변수 선언 (반환할 값을 저장할 변수)
current=first; // first 의 값 current에 저장
if (Isempty()) // current 가 NULL이면 저장된값 없음
{
return 0;
}
else if (current==top) // current 가 top와 같으면 값이 하나 있음
{
temp=*top; // top에 저장된 값을 temp 변수에 넘겨주고
delete top; // top의 노드 삭제
return temp.value; // temp.value(마지막 저장값 ) 반환
} else {
while (current->Next!=top) // current의 Next 값이 top과 같을때 까지
{
current=current->Next; // currentf를 하나씩 다음 노드로 이동
}
temp=*top; // top의 노드값을 temp 에 저장
top=current; // top을 이전 노드로 이동(current는 top의 바로 전 노드이다. )
delete top->Next;// top 노드 삭제
top->Next=0;
return temp.value; //// temp.value(마지막 저장값 ) 반환
}
}
#endif
variable_value[z]=c;
z++;
}
}
}// End of else
}// End of for
cout << "\n\n계산된 값: " << estack.del() << "\n\n";
}// End of eval()
#endif
위의 Token 클래스에서 사용하는 스택 프로그램 파일 (template 과 linked list 이용)
stackh.h
#ifndef STACKH_H // stack 클래스
#define STACKH_H
//---------------------------------------------------------------------
// 설명 : 이 클래스는 노드의 형태를 나타내는 클래스이다.
// 기능 : 하나의 노드를 구성하는 형태로 선언 되어 있다.
//---------------------------------------------------------------------
template
class Node
{
public:
Node();
Type value; // 입력 받는 값을 포인터로 하여 저장한 값을 가리키게 한다.
Node *Next; // 다음 노드를 가리키는 포인터 값
};
template
Node
{ // 생성자 함수. 변수 초기화
Next=NULL;
}
//----------------------------------------------------------------------
// 설명 : 스택 클래스. 자료를 저장하고 후에 저장한 값을 먼저 빼낸다.
// 기능 : Node 형의 자료를 저장하고 불러온다. 링크드 리스트를 이용한다.
//----------------------------------------------------------------------
template
class Stack { // stack 클래스
private:
Node
Node
public:
Stack(); // 생성자 함수
bool Isempty();
void add(T x); // stack 값을 저장하는 함수
T del(); // top 의 값을 빼오고 노드를 삭제하는 함수
};
template
bool Stack
{
if (first==NULL)
return true;
else
return false;
}
template
Stack
{
top=NULL;
first=NULL;
}
//------------------------------------------------------------------
// 기능 : 새로운 데이터를 저장한다.
// 동작 : 새로운 동적 Node 를 생성하여 그곳에 입력한 데이터 저장
//------------------------------------------------------------------
template
void Stack
{
if (Isempty()) // first가 NULL이면
{
first= top = new Node
top->value=x; // top value에 입력한 값 저장
top->Next=0; // top Next 에 0저장 하여 마지막 알림
} else {
top->Next = new Node
top = top->Next; // top을 새로 생성된 노드로 이동
top->value=x; // top에 입력값 저장
top->Next=0; // top Next 에 0을 저장하여 마지막 값 알림
}
}
//--------------------------------------------------------------------
// 기능 : 가장 나중에 저장된 데이터를 반환하고 그 Node 를 삭제한다.
// 동작 : top에 저장된 값을 반환하고 top의 주소를 이전 Node 로 바꾼다.
//--------------------------------------------------------------------
template
T Stack
{
Node
Node
current=first; // first 의 값 current에 저장
if (Isempty()) // current 가 NULL이면 저장된값 없음
{
return 0;
}
else if (current==top) // current 가 top와 같으면 값이 하나 있음
{
temp=*top; // top에 저장된 값을 temp 변수에 넘겨주고
delete top; // top의 노드 삭제
return temp.value; // temp.value(마지막 저장값 ) 반환
} else {
while (current->Next!=top) // current의 Next 값이 top과 같을때 까지
{
current=current->Next; // currentf를 하나씩 다음 노드로 이동
}
temp=*top; // top의 노드값을 temp 에 저장
top=current; // top을 이전 노드로 이동(current는 top의 바로 전 노드이다. )
delete top->Next;// top 노드 삭제
top->Next=0;
return temp.value; //// temp.value(마지막 저장값 ) 반환
}
}
#endif
소개글