今天讲栈,栈的基本操作是入栈和出栈,栈的特点是先进后出。同时在进栈的时候注意栈是否是满的,出栈的时候注意栈是否是空的。
直接上代码:
栈的类实现:
//使用类模板来实现
template <class T>
class stack
{
public:
stack(int size);
~stack();
void pop();
void push(T &a);
bool isEmpty();
bool isFull();
void print(int index);
private:
int top;
int size;
T * stackArray;
};
template <class T>
void stack<T>:: print(int index)
{
cout<<stackArray[index];
}
template <class T>
bool stack<T> ::isEmpty()
{
return top==-1
}
template <class T>
bool stack<T> ::isFull()
{
return top==size ;
}
template <class T>
stack<T>::stack(int size)
{
if (size<=0)
{
cout<<"the size is no less than 0";
return ;
}
else{
top = -1;
this->size = size;
this->stackArray = new T[size];
for (int i=0;i<this->size;i++)
{
stackArray[i]=0;
}
}
}
template <class T>
stack<T>::~stack()
{
delete []stackArray;
}
template <class T>
void stack<T>:: pop()
{
if false==isEmpty()
{
cout<<"the stack is not empty";
stackArray[top--]=0;
}
else
{
cout<<"the stack is empty";
return;
}
}
template <class T>
void stack<T>::push(T &a)
{
if (true == isFull())
return;
else
{
stackArray[++top] = a;
}
}
在main函数中定义,使用类模板,并将template实例化为double类型。
#include <iostream>
#include "stack.h"
using namespace std;
int main()
{
int size = 20;
stack<double>stak(size);
double element=0.9;
stak.push(element);
stak.print(0);
}
值得注意的是在这里的top的自加和自减的顺序,在push的时候,要先自加,然后再压入元素。而在pop的时候,要先弹出元素,然后再自减。