tjw1218 2014-12-12 00:45 采纳率: 80%
浏览 2167
已采纳

C++用类对堆栈的操作,请写详细点

class STACK{
int *const elems; //申请内存用于存放栈的元素
const int max; //栈能存放的最大元素个数
int pos; //栈实际已有元素个数,栈空时pos=0;
public:
STACK(int m); //初始化栈:最多m个元素
STACK(const STACK&s); //用栈s拷贝初始化栈
int size ( ) const; //返回栈的最大元素个数max
int howMany ( ) const; //返回栈的实际元素个数pos
STACK& push(int e); //将e入栈,并返回栈
STACK& pop(int &e); //出栈到e,并返回栈
STACK& assign(const STACK&s); //赋s给栈,并返回被赋值的栈
void print( ) const; //打印栈
~STACK( ); //销毁栈
};

怎么写函数声明,谢谢了

  • 写回答

3条回答 默认 最新

  • threenewbee 2014-12-12 04:58
    关注

    函数声明不都有了么?你该写函数实现啦。

    参考代码

    /**
    •<!--
    •File : stack.h
    •Author : fancy
    •Email : fancydeepin@yeah.net
    •Date : 2013-02-03
    •--!> */ #include #include #include #define Element char #define INIT_SIZE 10 #define INCREMENT_SIZE INIT_SIZE / 2

    typedef struct TStack {
    Element *base;
    Element *top;
    int size;
    } *Stack;

    //栈的构造器,创建空栈
    void stackConstructor(Stack &stack){
    stack->base = (Element *)malloc(INIT_SIZE * sizeof(Element));
    if(!stack->base){
    printf("\n为栈分配内存空间失败!\n");
    exit(0);
    }
    stack->top = stack->base; //空栈 top == base
    stack->size = INIT_SIZE;
    }

    //是否为空栈
    bool isEmpty(Stack stack){
    if(stack->top == stack->base){
    return true;
    }
    return false;
    }

    //压栈
    bool push(Stack &stack, Element e){
    if(stack->top - stack->base >= stack->size){ //栈满
    stack->base = (Element *)realloc(stack->base, (stack->size + INCREMENT_SIZE) * sizeof(Element));
    if(!stack->base){
    printf("\n为栈扩展内存空间失败!\n");
    return false;
    }
    stack->top = stack->base + stack->size;
    stack->size += INCREMENT_SIZE;
    }
    *stack->top++ = e;
    return true;
    }

    //弹栈
    Element pop(Stack stack){
    if(isEmpty(stack)){
    printf("\n栈为空,弹栈操作失败!\n");
    return ' ';
    }
    return *--stack->top;
    }

    /**
    •<!--
    •File : Stack.cpp
    •Author : fancy
    •Email : fancydeepin@yeah.net
    •Date : 2013-02-03
    •--!> */ #include "stack.h"

    int main() {
    Stack stack;
    stackConstructor(stack);
    push(stack, 'f');
    push(stack, 'a');
    push(stack, 'n');
    push(stack, 'c');
    push(stack, 'y');
    printf("%c", pop(stack));
    printf("%c", pop(stack));
    printf("%c", pop(stack));
    printf("%c", pop(stack));
    printf("%c", pop(stack));
    //output[result]: ycnaf
    return 0;

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿