my_Queue.h
# ifndef MY_QUEUE_H
# define MY_QUEUE_H
class My_Queue
{
private :
int * m_queue;
int front;
int tail;
int m_length;
public :
My_Queue ( int len) ;
My_Queue ( const My_Queue& obj) ;
int length ( ) ;
bool pop ( ) ;
bool push ( int value) ;
bool empty ( ) ;
bool full ( ) ;
bool show ( ) ;
~ My_Queue ( ) ;
} ;
# endif
my_Queue.c
# include "my_Queue.h"
# include <iostream>
using namespace std;
My_Queue :: My_Queue ( int len) : m_queue ( nullptr ) , front ( 0 ) , tail ( 0 ) , m_length ( 0 )
{
m_queue = new int [ len+ 1 ] ;
for ( int i = 0 ; i < len+ 1 ; i++ )
{
m_queue[ i] = 0 ;
}
m_length = len+ 1 ;
}
My_Queue :: My_Queue ( const My_Queue& obj)
{
m_length = obj. m_length;
m_queue = new int [ obj. m_length] ;
for ( int i = 0 ; i < obj. m_length; i++ )
{
m_queue[ i] = obj. m_queue[ i] ;
}
}
int My_Queue :: length ( )
{
return ( tail + m_length - front) % m_length;
}
bool My_Queue :: pop ( )
{
bool ret = true ;
if ( empty ( ) )
{
cout << "队列为空" << endl;
ret = false ;
return ret;
}
front = ( front + 1 ) % m_length;
cout << "出队成功" << endl;
return ret;
}
bool My_Queue :: push ( int value)
{
bool ret = true ;
if ( full ( ) )
{
cout << "队列已满" << endl;
ret = false ;
return ret;
}
m_queue[ tail] = value;
tail = ( tail + 1 ) % m_length;
cout << "入队成功" << endl;
return ret;
}
bool My_Queue :: empty ( )
{
return front == tail;
}
bool My_Queue :: full ( )
{
return ( tail + 1 ) % m_length == front;
}
bool My_Queue :: show ( )
{
bool ret = true ;
if ( empty ( ) )
{
ret = false ;
cout << "队列为空" << endl;
return ret;
}
for ( int i = front; i != tail; i = ( i+ 1 ) % m_length)
{
cout << m_queue[ i] << " " ;
}
cout << endl;
return ret;
}
My_Queue :: ~ My_Queue ( )
{
delete [ ] m_queue;
}
my_Stack.h
# ifndef MY_STACK_H
# define MY_STACK_H
class My_Stack
{
private :
int * m_stack;
int m_length;
int m_max;
public :
My_Stack ( int len) ;
My_Stack ( const My_Stack& obj) ;
int length ( ) ;
int gettop ( ) ;
bool pop ( ) ;
bool push ( int value) ;
bool empty ( ) ;
bool full ( ) ;
bool show ( ) ;
bool clear ( ) ;
~ My_Stack ( ) ;
} ;
# endif
my_Stack.c
# include "my_Stack.h"
# include <iostream>
using namespace std;
My_Stack :: My_Stack ( int len) : m_stack ( nullptr ) , m_length ( 0 ) , m_max ( 0 )
{
m_stack = new int [ len] ;
for ( int i = 0 ; i < len; i++ )
{
m_stack[ i] = 0 ;
}
m_max = len;
}
My_Stack :: My_Stack ( const My_Stack& obj)
{
m_max = obj. m_max;
m_stack = new int [ obj. m_max] ;
for ( int i = 0 ; i < obj. m_max; i++ )
{
m_stack[ i] = obj. m_stack[ i] ;
}
}
int My_Stack :: length ( )
{
return m_length;
}
int My_Stack :: gettop ( )
{
if ( empty ( ) )
{
return - 1 ;
}
int & top = m_stack[ m_length- 1 ] ;
return top;
}
bool My_Stack :: pop ( )
{
bool ret = true ;
if ( empty ( ) )
{
ret = false ;
cout << "栈为空" << endl;
return ret;
}
m_length-- ;
cout << "出栈成功" << endl;
return ret;
}
bool My_Stack :: push ( int value)
{
bool ret = true ;
if ( full ( ) )
{
ret = false ;
cout << "栈已满" << endl;
return ret;
}
m_stack[ m_length] = value;
m_length++ ;
cout << "入栈成功" << endl;
return ret;
}
bool My_Stack :: empty ( )
{
return m_length == 0 ;
}
bool My_Stack :: full ( )
{
return m_length == m_max;
}
bool My_Stack :: show ( )
{
bool ret = true ;
if ( empty ( ) )
{
ret = false ;
cout << "栈为空" << endl;
return ret;
}
for ( int i = 0 ; i < m_length; i++ )
{
cout << m_stack[ i] << " " ;
}
cout << endl;
return ret;
}
bool My_Stack :: clear ( )
{
bool ret = true ;
if ( empty ( ) )
{
ret = false ;
cout << "栈为空" << endl;
return ret;
}
m_length = 0 ;
cout << "栈已清空" << endl;
return ret;
}
My_Stack :: ~ My_Stack ( )
{
delete [ ] m_stack;
}