回 帖 发 新 帖 刷新版面

主题:栈问题

/* Note:Your choice is C IDE */
#include "stdio.h"
#define max 6
typedef struct stack{
    char ch[max];
    int top;
}stack;

//初始化
stack *initiatels()
{
    stack *head;
    head=(stack *)malloc(sizeof(stack));
    head->top=-1;
    return head;
}

//进栈
void instack(stack *head)
{
    char m;
    while(head->top<max)
    {
        head->top++;
        m=getchar();
        head->ch[head->top]=m;
        
    }
}


//出栈
void outstack(stack *head)
{
    while(head->top>0)
    {
        printf("%c",head->ch[head->top]);
        head->top--;
    }
}
            
void main()
{
    stack *head;
    head=initiatels();
    instack(head);
    outstack(head);
}




有谁能够告诉一下,这错在哪里呢

回复列表 (共3个回复)

沙发

不知道楼主的#define max 6
max表示的是什么意思,栈能最大存储数据的个数?
在 initiatels函数中top被初始化为-1;//表示空栈?
在 instack函数中while(head->top<max)这句话可能会有数据溢出:top从-1到max-1
   满足循环的条件,一共执行了 max-1 - (-1) + 1 == max+1次,而栈最多能存储
   max个数据。建议改为:while(head->top < max-1)。
在 outstack函数中while(head->top>0),当top为0时就不会有输出了,而从上面top的
   初始化值可以看出top为0时是最先入栈的元素。
    可以这样改:while(head->top >= 0)

板凳

while(head->top>0)
改为while(head->top>=0)即可、、

3 楼

[quote]不知道楼主的#define max 6
max表示的是什么意思,栈能最大存储数据的个数?
在 initiatels函数中top被初始化为-1;//表示空栈?
在 instack函数中while(head->top<max)这句话可能会有数据溢出:top从-1到max-1
   满足循环的条件,一共执行了 max-1 - (-1) + 1 == max+1次,而栈最多能存储
   max个数据。建议改为:while(head->top < max-1)。
在 outstack函数中while(head->top>0),当top为0时就不会有输出了,而从上面top的
   初始化值可以看出top为0时是最先入栈的元素。
    可以这样改:while(head->top >= 0)

[/quote]


max 是表示栈所能存的最大个数


按你所建议的去改了,但还是只能输入3个,然后它就自动输出了???

我来回复

您尚未登录,请登录后再回复。点此登录或注册