简介 目录 评价 推荐
  • qq_慕婉清0378487 2019-07-15
    查看了,在程序编写时并没多输出‘?’,但是结果显示多了一个‘?’

    ?是因为越界了

    3回答·903浏览
  • 宝慕林2301194 2018-07-30
    this指针这里是什么问题?
    已采纳 suanmaojipi 的回答

    调试一下,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

    3回答·1302浏览
  • 萧容羽 2018-04-15
    这是什么情况。。。

    放多点代码上来,你这个问题应该不是错在demo里面

    3回答·1292浏览
  • 慕前端0711973 2018-03-16
    出现重复定义

    看下这个变量什么时候定义好,作用域是什么

    1回答·1249浏览
  • 慕粉2359383080 2018-02-13
    出栈成功但是输出不对
    已采纳 oldlin 的回答

    因为你结果显示栈长度是4,所以pop应该是正确的,多一个o应该是你多输出了一个o,你检查一下能输出elem的语句是不是两个,造成重复输出。另外你可以展示一下你的代码,看到你的代码才能准确的告诉你原因

    1回答·1528浏览
  • 之恒zahen 2018-02-11
    还是会出现undefined reference怎么解决???

    检查是否在头文件中声明,是否在编译中有对应的obj文件

    1回答·1253浏览
  • qq_袮D影孑_03909390 2017-10-01
    栈的问题了
    已采纳 进击的单纯 的回答

    栈底没有指向,栈顶这时的值为1,但也不能说栈顶指向他,这又不是指针。

    可以说栈顶只是记录了这个栈的元素个数。

    但这时通过栈顶的值可以访问到它。

    1回答·1345浏览
  • 死咸鱼 2017-08-10
    变量取余问题
    已采纳 慕勒4262831 的回答

    因为队列篇举例的是环形队列,队头和队尾指向的位置一旦超过队的容量,就指向了初始位(0位)。例如:4个位置(0~3)的队列,现在队头在1位置,队尾在3位置,此时再来一个元素,队尾只能移到0位置,即(3+1)%4=0的位置。出队时队头位置的变化情况也是一样的。而栈的情况和环形队列不同,数据存储是按直线形式的,在元素入栈和出栈时不会出现环形队列指针位置变化的情况,下标不用取余。

    1回答·1417浏览
  • qq_梦依凡_04310413 2016-10-29
    如果不知道具体需要建多大的站,构造函数怎么写

    根据老师写了一个整个的程序,这个是申请物理空间的,因为物理空间很大一般不会不足,符合你的问题,所以可以按需要取多少大小。

    不是很规范,有所不足互相学习哈

    #include<iostream>
    using namespace std;
    #define elemtype char
    struct node {
    elemtype data;
    node *last;
    node *next;
    //新定义的结点的默认构造函数 
    node(const elemtype data = 0,node *last = NULL,node *next = NULL) {
    this->data = data;
    this->last = last;
    this->next = next;
    }
    ~node() {
    data = 0;
    last = next = NULL;
    }
    };
    class stack{
    private:
    node *base; //栈底 
    node *top;  //栈顶 
    int size;   //栈的实际大小 
    public:
    stack() {
    //申请一个哨兵结点作为栈底,哨兵的data没有意义 
    //如果申请物理空间失败,抛出异常 
    if (!(base = new node())) {
    cout << "内存不足!";
    //throw ...
    }
    top = base;
    size = 0;
    }
    ~stack() {
    node *p=base,*q=NULL;
    while(p) {
    q = p;
    p = p->next;
    delete q;
    }
    }
    bool isfull() {
    //尝试申请一个node,如果可以申请说明未满 
    node *p=new node;
    if (!p) {
    return true;
    }
    else {
    delete p;
    return false;
    }
    }
    bool isempty() {
    return !size;
    //也可以写成 return top == base;
    }
    void push(const elemtype &c) {
    if (isfull()) {
    cout << "满了";
    //throw .. 
    }
    node *p = new node(c);
    top->next = p;
    p->last = top;
    top = p;
    ++size;
    }
    elemtype pop() {
    if (isempty()) {
    cout << "空了";
    //theow ..
    }
    elemtype x = top->data;
    node *p = top;
    top = p->last;
    top->next = NULL;
    delete p;
    --size;
    return x;
    }
    //遍历函数,默认从栈底到栈顶 
    void traverse(bool isfrombottom = true) {
    node *p;
    if (isfrombottom) {
    p = base->next;
    while (p) {
    cout << p->data;
    p = p->next;
    }
    cout<<endl;
    }
    else {
    p = top;
    while (p != base) {
    cout << p->data;
    p = p->last;
    }
    cout<<endl;
    }
    } 
    int lenth() {
    return size;
    }
    void clearStack() {
    node *p = base->next,*q;
    while (p) {
    q = p;
    p = p->next;
    delete q;
    }
    top = base;
    size = 0;
    base->next = NULL;
    }
    };
    int main(void) {
    stack *s = new stack();
    if (s->isempty())
    cout<<"栈为空"<<endl;
    cout << s->lenth()<<endl;
    s->push('h');
    s->push('e');
    s->push('l');
    s->push('l');
    s->push('o');
    cout << s->lenth()<<endl;
    s->traverse();
    s->traverse(false);
    s->clearStack();
    cout << s->lenth()<<endl;
    cout <<endl;
    s->push('a');
    s->traverse();
    s->pop();
    s->traverse();
    //测试是不是能二次入栈 
    s->push('a');
    s->traverse();
    s->pop();
    s->traverse();
    //因为内存物理空间蛮大的,所以一般栈满的情况不会出现 在此不做测试 
    //if (s->isfull())
    //cout<<"栈为满"<<endl;
    s->clearStack();
    //最后这句话送给大家
    s->push('H');
    s->push('a');
    s->push('p');
    s->push('p');
    s->push('y');
    s->push(' ');
    s->push('C');
    s->push('h');
    s->push('r');
    s->push('i');
    s->push('s');
    s->push('t');
    s->push('m');
    s->push('a');
    s->push('s');
    s->push('!');
    s->traverse();
    delete s;
    return 0;
    }


    3回答·1239浏览
  • 风吹风的 2016-07-13
    请问老师用的什么IDE
    2回答·1086浏览
  • 不惧亢龙 2016-05-06
    请教老师 *pStack和m_pBuffer的区别是什么?

    明白了,一个是对象一个是成员

    1回答·1216浏览
  • 240173099 2016-04-30
    MyStack *pStack=new Mystack(5);出错

    最后应该写成delete pStack;,

    我看你写成delete []pStack;        

    看来你和我一样,一开始以为这个是五个长度的数组了所以加了[]

    试试吧,我改过这个就对了

    2回答·1884浏览
  • 吴樟 2016-04-26
    请问为啥可以char elem=0;

    给elem赋了一个初值,初值为ASCII值为0的字符。而pop()出‘o’,是因为当前栈顶元素是‘o’,进行出栈操作就会弹出栈顶元素‘o’。

    3回答·1520浏览
数据加载中...
开始学习 免费