目录
栈代码
#include <iostream>
#define N 256
using namespace std;
template <typename T>
class My_Stack
{
private:
T data[N];
int top;
public:
//无参构造
My_Stack();
//判空
bool empty()const;
//入栈
void push(const T val);
//出栈(将栈顶的元素移除)
void pop();
//返回栈中元素的数目
int size();
//返回对栈顶元素的引用
T& My_top();
//打印函数
void show();
};
template <typename T>
My_Stack <T>::My_Stack():top(-1) {} //无参构造
template <typename T>
bool My_Stack<T>::empty()const //判空
{
return top == -1?1:0;
}
template <typename T>
void My_Stack<T>::push(const T val) //入栈
{
//判满
if(top==N){return;}
top++;
data[top] = val;
}
template <typename T>
void My_Stack<T>::pop() //出栈(将栈顶的元素移除)
{
//判空
if(empty()){return;}
data[top] = 0;
top--;
}
template <typename T>
int My_Stack<T>::size() //返回栈中元素的数目
{
cout<<"栈中的元素数目为:"<<top+1<<endl<<endl;;
return top+1;
}
template <typename T>
T& My_Stack<T>::My_top() //返回对栈顶元素的引用
{
//if(empty()){return;}
return data[top];
}
template <typename T> //打印函数
void My_Stack<T>::show()
{
if(empty())
{
cout<<"栈内没有元素"<<endl<<endl;
return;
}
for(int i=0;i<=top;i++)
{
cout<<data[i]<<" ";
}
cout<<endl<<endl;
}
int main()
{
My_Stack<int> n1;
n1.show();
for(int i=0;i<10;i++)
{
n1.push(i+10);
}
n1.show();
n1.size(); //返回栈中元素的数目
n1.pop(); //将栈顶元素移除
n1.show();
My_Stack<int> n2;
n2.push(n1.My_top()); //将n1栈的栈顶元素存入n2栈
n2.show();
return 0;
}
运行实例
队列代码
#include <iostream>
#define N 10
using namespace std;
template <typename T>
class My_Queuse
{
private:
T data[N];
int front,rear;
int size;
public:
//无参构造
My_Queuse();
//判空
bool empty()const;
//判满
bool full()const;
//往队列中加入一个元素
void push( const T &val );
//返回队列的最后一个元素
T &back();
//返回队列的第一个元素
T &My_front();
//删除队列的一个元素
void pop();
//返回队列中元素的个数
int My_size();
//打印函数
void show();
};
template <typename T>
My_Queuse <T>::My_Queuse():front(0),rear(0),size(0){} //无参构造
template <typename T>
bool My_Queuse<T>::empty()const //判空
{
if(rear == front)
{
cout<<"队列为空"<<endl<<endl;
return 1;
}
return 0;
}
template <typename T>
bool My_Queuse<T>::full()const //判满
{
if((rear+1)%N == front)
{
cout<<"队列已满"<<endl<<endl;
return 1;
}
return 0;
}
template <typename T>
void My_Queuse<T>::push(const T &val) //往队列中加入一个元素
{
if(full()){ return;}
data[rear] = val;
rear = (rear+1)%N;
size++;
}
template <typename T>
T& My_Queuse <T>::back() //返回队列的最后一个元素
{
//if(empty()){return }
return data[rear-1];
}
template <typename T>
T& My_Queuse <T>::My_front() //返回队列的第一个元素
{
//if(empty()){return }
return data[front];
}
template <typename T>
void My_Queuse <T>::pop() //删除队列的一个元素
{
if(empty()){ return;}
data[front] = 0;
front = (front+1)%N;
size--;
return ;
}
template <typename T>
int My_Queuse <T>::My_size() //返回队列中元素的个数
{
cout<<"队列中元素的个数:"<<size<<endl<<endl;
return size;
}
template <typename T> //打印函数
void My_Queuse<T>::show()
{
if(empty()){return;}
int new_front = front;
while(1)
{
cout<<data[front]<<" ";
if((front+1)%N==rear)
{
break;
}
front = (front+1)%N;
}
front = new_front;
cout<<endl<<endl;
}
int main()
{
My_Queuse<int> q1;
q1.show();
for(int i=0;i<9;i++)
{
q1.push(i+10);
}
q1.show();
q1.My_size(); //查看队列元素数目
q1.pop(); //删除队列第一个元素
q1.show();
int b1 = q1.back(); //返回队列最后一个元素
cout<<b1<<endl<<endl;
int f1 = q1.My_front(); //返回队列第一个元素
cout<<f1<<endl<<endl;
return 0;
}