순서 스 택 의 템 플 릿 클래스 구현
#ifndef STACK_H_
#define STACK_H_
template <typename T>
class Stack
{
public:
Stack(int size = Stack_init_size);
//
~Stack();
Stack(const Stack<T> &s);
//
const Stack<T>& operator=(const Stack<T> &s);
//
void ClearStack();
//
bool StackEmpty();
// TRUE FALSE
int StackLength();
// ,
bool GetTop(T &elem);
// , elem , true, ERROR
void Push(T elem);
// elem
bool Pop(T &elem);
// , , elem , true, error
private:
T *base;
T *top;
int m_size;
enum StackSize
{
Stack_init_size = 100, //
Stack_incerement = 10 //
};
};
template <typename T>
Stack<T>::Stack(int size)
{
base = new T[Stack_init_size];
if (base==NULL)
{
exit(1);
}
top = base;
m_size = size;
}
template <typename T>
Stack<T>::Stack(const Stack<T> &s)
{
base = new T[s.m_size];
if (base == NULL)
{
exit(1);
}
top = base;
m_size = s.m_size;
T * p1 =s.base ;
T * p2 = base;
while (p1!=s.top)
{
*p2 = *p1;
p1++;
p2++;
}
top = p2;
}
template <typename T>
const Stack<T>& Stack<T>::operator=(const Stack<T> &s)
{
delete[] base;
base = new T[s.m_size];
if (base == NULL)
{
exit(1);
}
top = base;
m_size = s.m_size;
T * p1 = s.base;
T * p2 = base;
while (p1 != s.top)
{
*p2 = *p1;
p1++;
p2++;
}
top = p2;
return *this;
}
template <typename T>
Stack<T>::~Stack()
{
delete[] base;
}
template <typename T>
int Stack<T>::StackLength()
{
int n = 0;
T * p = top;
while (p!= base)
{
n++;
p--;
}
return n;
}
template <typename T>
void Stack<T>::ClearStack()
{
while (top != base)
{
top--;
*top = 0;
}
}
template <typename T>
bool Stack<T>::StackEmpty()
{
if (top == base)
{
return true;
}
return false;
}
template <typename T>
bool Stack<T>::GetTop(T &elem)
{
if (StackEmpty())
{
return false;
}
else
{
top--;
elem = *top;
*top = 0;
return true;
}
}
template <typename T>
void Stack<T>::Push(T elem)
{
int size_increment;
if (top - base>Stack_init_size)
{
m_size = m_size + Stack_incerement;
T *temp = new T[m_size];
T *p = base;
T *q = temp;
while ((p + 1) != top)
{
*q = *p;
q++;
p++;
}
delete[] base;
base = temp;
*q = elem;
q++;
}
else
{
*top = elem;
top++;
}
}
template <typename T>
bool Stack<T>::Pop(T &elem)
{
if (top == base)
{
return false;
}
top--;
elem = *top;
*top = 0;
return true;
}
#endif
template macro auto 등 은 모두 헤더 파일 에서 볼 수 있어 야 하 며, 성명 과 정 의 를 독립 적 으로 컴 파일 할 수 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.