栈的基本操作模板类,包括栈的压入,出栈,删除栈顶元素,清空栈等操作

//头文件
#ifndef STACKLIST_H
#define STACKLIST_H

#include
   
   
    
    
#include
    
    
     
     
#include
     
     
      
      
using namespace std;

template
      
      
       
       
class StackList{

private:
	T* stackList;
	int maxSize;//栈的最大空间
	int top;//标记栈顶

public:
	StackList();//默认构造函数
	StackList(int size);//构造函数
	~StackList();
	void Clear();//清空栈
	bool Push(const T item);//将元素压入栈
	void Pop();//删除栈顶元素
	T Top();//返回栈顶元素
	T TopAndPop();//删除并返回栈顶元素
	bool isEmpty();//是否空栈
	bool isFull();//是否满栈
	void Print();
	void Sort();
	int Length();
};
template
       
       
         int StackList 
        
          ::Length() { int length = top + 1; return length; } template 
         
           StackList 
          
            ::StackList() { maxSize = 0; top = -1; } template 
           
             StackList 
            
              ::StackList(int size){ maxSize = size; stackList = new T[maxSize]; top = -1;//top=-1代表栈为空 } template 
             
               StackList 
              
                ::~StackList() { delete[]stackList; } template 
               
                 void StackList 
                
                  ::Clear() { top = -1; } template 
                 
                   bool StackList 
                  
                    ::Push(const T item) { if (maxSize == 0) { stackList = new T[1];//若是在定义实例时没有直接给出栈的空间大小,则在第一次压入栈操作时分配一个空间 maxSize = 1; //在这里一定要记住将maxSize设置为1,因为一开始在定义对象时你并没有为maxSize赋值, //所以他被初始化为0,若不更改在下面的程序中会出现 //错误,因为下面有关于maxSize的计算maxSize*=2; } else if (top == maxSize - 1) { //可以只扩大一个空间,但是会增加操作次数,是程序的速度变慢,所以一次增加两倍 T* str = new T[maxSize * 2]; for (int i = 0; i < maxSize; i++) { str[i] = stackList[i]; } delete[]stackList;//空间若是new出来的,必须要delete,防止内存泄露 stackList = str; maxSize *= 2; } stackList[++top] = item; return true; } template 
                   
                     void StackList 
                    
                      ::Pop() { if (top == -1) { //如果为空栈则不进行任何操作 return; } top--; } template 
                     
                       T StackList 
                      
                        ::Top() { if (top == -1) { return; } else { return stackList[top]; } } template 
                       
                         T StackList 
                        
                          ::TopAndPop() { T value; if (top == -1) return; else { value=stackList[top--]; return value; } } template 
                         
                           bool StackList 
                          
                            ::isEmpty() { if (top == -1) return true; else return false; } template 
                           
                             bool StackList 
                            
                              ::isFull() { if (top == maxSize - 1) return true; else return false; } template 
                             
                               void StackList 
                              
                                ::Print() { for (int i = 0; i <= top; i++) { cout << stackList[i] << " "; } cout << endl; } template 
                               
                                 void StackList 
                                
                                  ::Sort() { //该函数的实现借助了vector容器 vector 
                                 
                                   ptr; for (int i = 0; i <= top; i++) { ptr.push_back(stackList[i]); } sort(ptr.begin(),ptr.end()); for (int i = 0; i <= top; i++) { stackList[i] = ptr[i]; } } #endif //主函数 #include"StackList.h" int main(int argc, char argv[]) { int length; StackList 
                                  
                                    list; for (int i = 0; i < 10; i++) { int number; cin >> number; list.Push(number); } length=list.Length(); cout << length << endl; list.Print(); list.Sort(); list.Print(); return 0; } 
                                   
                                  
                                 
                                
                               
                              
                             
                            
                           
                          
                         
                        
                       
                      
                     
                    
                   
                  
                 
                
               
              
             
            
           
          
         
       
      
      
     
     
    
    
   
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值