标题:出栈的时候 出错 求大神解答 !!!急
取消只看楼主
li71
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2018-9-8
结帖率:100%
已结贴  问题点数:15 回复次数:6 
出栈的时候 出错 求大神解答 !!!急

#include <iostream>
#include<stdio.h>
#include<malloc.h>
#define MaxSize 100
using namespace std;
typedef char ElemType;
typedef struct {

    ElemType data[MaxSize];//存取栈中的数据元素
    int top;//栈顶指针,即存放栈顶元素在data数组中的下标

}SqStack;//顺序栈类型
void InitStack(SqStack *&s)
{
      s=(SqStack*)malloc(sizeof(SqStack));//分配一个顺序栈空间,首地址存放在s中
      s->top=-1;//栈顶指针置为-1

}

void DestoryStack(SqStack *&s)
{
    free(s);

}

bool StackEmpty(SqStack *s)
{
    return ( s->top == -1 );

}



bool Push(SqStack *&s,ElemType e)
{
    if(s->top==MaxSize-1)//栈满的情况,即栈上溢出
        return false;
    s->top++;//栈顶指针增1
    s->data[s->top]=e;//元素e放在栈顶指针处
    return true;

}

bool Pop(SqStack *&s,ElemType &e)
{
  if(s->top==-1)//栈为空的情况,即栈下溢出
    return false;
  e=s->data[s->top];//取栈顶元素
  s->top--;//栈顶指针减1
  return true;
}


bool GetTop(SqStack *&s,ElemType &e)
{
    if(s->top==-1)//栈为空的情况,即栈下溢出
        return false;
    e=s->data[s->top];//取栈顶元素
    return true;
}
int main()//主函数
{

    int n;
    int i;
    ElemType e;
    SqStack *sk;
    fflush(stdin);
    InitStack(sk);
    printf("(1)栈s已被初始化!\n");
    printf("(2)栈s");
    if(StackEmpty(sk))
        printf("为空栈!");
    else
        printf("不为空栈!");
    printf("\n");
    printf("(3)请输入元素的个数:");
    scanf("%d",&n);
    printf("请输入要入栈的元素:");

    for(i=0;i<n;i++)
    {
        scanf("%c",&e);
        Push(sk, e);
    }

    if(Push(sk,e))
        printf("入栈成功");
    else{
        printf("入栈不成功");
    }
    printf("\n");
    printf("(4)栈s");
    if(StackEmpty(sk))
        printf("为空栈!");
    else{
        printf("不为空栈!");
      }
    printf("\n");
    printf("(5)栈s的出栈序列为");
  
    while(!(StackEmpty(sk)))
    {
        Pop(sk,e);
        printf("%c",e);

    }

    printf("\n");
    printf("(6)栈s");
     if(StackEmpty(sk))
        printf("为空栈!");
    else{
        printf("不为空栈!");
    }
        printf("\n");
    DestoryStack(sk);
    printf("(7)栈s已被释放!");

}





出栈的时候应该是edcba  为什么是这样呢  求大神解答!


搜索更多相关主题的帖子:  top return 为空 printf 
2018-10-27 17:45
li71
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2018-9-8
得分:0 
程序第五步出错了应该是
2018-10-27 17:46
li71
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2018-9-8
得分:0 
回复 6楼 MeandC
你这个使用c语言写的吗  大神  能不能在我的源程序上改动呀 你写的这个看不懂呀
2018-10-27 21:19
li71
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2018-9-8
得分:0 
回复 10楼 MeandC
刚看到    感谢大神  但是我还是有个疑问  那个输出入栈成功假如要是没删就出现两个e  这是为啥呀
这是两张对比的图 帮忙看看  谢谢啦

[此贴子已经被作者于2018-10-28 08:35编辑过]

2018-10-28 08:33
li71
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2018-9-8
得分:0 
回复 10楼 MeandC
老哥  我找到了一个解决方法  但是 不太明白   把Push和scanf 那两个互换一下位置  不删那个入栈成功语句   也能成功执行  这是为啥呀   能不能推荐一个看执行步骤最本质的软件呀   你之前看出是把回车也算进去了  咋看出来的呀   求教  哈哈
2018-10-28 08:59
li71
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2018-9-8
得分:0 
回复 13楼 MeandC
啥意思     不能互换位置  
2018-10-28 12:50
li71
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2018-9-8
得分:0 
回复 13楼 MeandC
将Push 和scanf  换位置不对?
2018-10-28 12:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-490739-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.668086 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved