当前位置:编程学习 > C/C++ >>

C++编程范式栈的泛型写法

贴代码:

 


stack.h


[cpp]
 struct   stack 

    void * elems;  
    int logicallen;  //当前栈空间中的元素个数  
    int allocalength;//栈空间的实际大小  
    int elemSize;//元素大小  
 
 
}; 

 struct   stack
{
 void * elems;
 int logicallen;  //当前栈空间中的元素个数
 int allocalength;//栈空间的实际大小
 int elemSize;//元素大小


};

stack.cpp


[cpp]
#include "stack.h"  
#include <iostream.h>  
#include<stdlib.h>  
#include "assert.h"  
#include "memory.h"  
/************************************************************************/ 
/*  创建一个栈空间                                                                      */ 
/************************************************************************/ 
void stackNew(stack *s,int elemSize){ 
 
    s->logicallen=0; 
    s->allocalength=4; 
    s->elems=(int *)malloc(4*elemSize); //申请栈空间  
}; 
/************************************************************************/ 
/* 释放栈空间                                                                      */ 
/************************************************************************/ 
void stackDelete(stack *s){ 
    free(s); 
     
}; 
 
/************************************************************************/ 
/*        chuzhan                                                              */ 
/************************************************************************/ 
 
/************************************************************************/ 
/* 将元素elem入栈                                                                    */ 
/************************************************************************/ 
//   
// void stackPush(stack *s,void *add){  
//   
//  if(s->logicallen == s->allocalength){  
//      s->allocalength *=2; //等价于s->allocalength = s->allocalength*2  
//      s->elems = (int *)realloc(s->elems,s->allocalength*sizeof(int));  
//  }  
//  assert(s->elems != NULL);  
//  s->elems[s->logicallen] =value;  
//  s->logicallen++;  
// };  
 
void stackGrow(stack *s){ 
 
    s->allocalength*=2; 
    s->elems = realloc(s->elems,s->elemSize*s->allocalength); 
 

/************************************************************************/ 
/* 将元素elem入栈                                                                    */ 
/************************************************************************/ 
void stackPush(stack *s,void *elemAddr){ 
     
    if(s->logicallen == s->allocalength){ 
        stackGrow(s); //需要扩容了  
         
    } 
    //手动计算元素地址,因为void*类型,系统比不知道该怎么处理。所以需要自己计算出入栈和出栈时元素的地址。  
    //从add地址下的内容拷贝到target的地址,拷贝长度为elemSize  
    void * target = (char *)s->elems+s->logicallen*s->elemSize; 
 
    memcpy(target,elemAddr,s->elemSize); 
 
 
    s->logicallen++; 
}; 
void main(){ 
     
     
int i=1; 
int j=2; 
int m = i+j*2; 
cout<<m<<endl; 
 
     
     

#include "stack.h"
#include <iostream.h>
#include<stdlib.h>
#include "assert.h"
#include "memory.h"
/************************************************************************/
/*  创建一个栈空间                                                                      */
/************************************************************************/
void stackNew(stack *s,int elemSize){

 s->logicallen=0;
 s->allocalength=4;
 s->elems=(int *)malloc(4*elemSize); //申请栈空间
};
/************************************************************************/
/* 释放栈空间                                                                      */
/*******

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,