C++栈的开发问题
巴扎黑
巴扎黑 2017-04-17 11:52:22
[C++讨论组]
#include<iostream>
using namespace std;

typedef struct Node
{
    char data;
    Node *pNext;
}NODE, *PNODE;

typedef struct Stack
{
    PNODE pTop;
    PNODE pBottom;
}STACK, *PSTACK;

void init(PSTACK pS);
void push(PSTACK pS);
void traverse(PSTACK pS);
int main()
{
    STACK S ;
    init(&S);
    push(&S);
    traverse(&S);
    return 0 ;
}

//栈的初始化
void init(PSTACK pS)
{
    pS -> pTop = new Node;

    if(NULL == pS -> pTop)
    {
        printf("动态内存分配失败!");
    }
    else
    {
        pS -> pBottom = pS -> pTop;
        pS -> pTop -> pNext = NULL;
    }

    return ;
}

//插入元素到栈顶
void push(PSTACK pS)
{
    char temp;
    do
    {
        cin>>temp;
        if(temp=='$')
        {
            PNODE r = pS -> pTop;
            temp = pS -> pTop -> data;
            pS -> pTop = r -> pNext;
            delete r;
        }
        if(temp!='#')
        {
            PNODE pNew = new Node;
            pNew -> data = temp;
            pNew -> pNext = pS -> pTop;
            pS -> pTop = pNew;
        }
    } while (temp!='#');

    return ;
}

//遍历栈S
void traverse(PSTACK pS)
{
    PNODE p = pS -> pTop;

    printf("栈内元素为:");
    while(p != pS -> pBottom)
    {
        cout<<p->data;
        p = p -> pNext;
    }

    printf("\n");
    return ;
}

这个代码意思是遇到#结束,遇到$就是压栈。比如输入11111$#,输出11111

如果temp = pS -> pTop -> data;删去,输出就变成$1111,请问出了什么问题?
还有删除栈顶元素,一定要temp = pS -> pTop -> data;这句嘛?这句什么用?

巴扎黑
巴扎黑

全部回复(1)
伊谢尔伦

不是很明白这个代码的意图,但是如原代码所写,遇到$的时候在第一个if里,把栈顶的元素删掉($前面那个字符),可是同时把temp也改成了栈顶元素的值,到第二个if又给把这个元素压回栈顶了。所以等于没做什么处理,只是换了个内存空间保存变量。如果去掉你说的那句话,temp就一直是$,那$会被压入栈顶,而原栈顶元素被删除。这就是你得到$1111的原因,实际上去掉那句话后,这个代码变成了删除$前面的字符的逻辑。

我猜想也许你这个代码在第二个if上漏了一个else,原意是将$前面的字符删除,有几个$就删几个,可能是这意思。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号