+ -
当前位置:首页 → 问答吧 → 各位帮帮我吧,我的栈出问题了

各位帮帮我吧,我的栈出问题了

时间:2011-12-11

来源:互联网

#include"stdio.h"
#include"iostream.h"
#define MAXSIZE 100
typedef struct
{
int top;
char data[MAXSIZE];
}SeqStack;
int Init(SeqStack *s)
{
s=new SeqStack;
if(s==NULL)
{
cout<<"error";
return 0;
}
else
{
cout<<"sucsess!";
s->top=-1;
cout<<s->top<<endl;
return 1;
}
}
int Empty(SeqStack *s)
{
if(s->top==-1)
return 1;
else
return 0;
}
int push(char w,SeqStack *s)
{
if(s->top==MAXSIZE-1)
return 0;
else
{
s->data[++s->top]=w;
return 1;
}

}
char pull(char x,SeqStack *s)
{
if(Empty(s))
return NULL;
else
{
x=s->data[s->top--];
return x;
}
}
char Top(SeqStack *s)
{
if(Empty(s))
return 0;
else return(s->data[s->top]);
}
void main()
{
char w='\0',a;
SeqStack *s;
Init(s);
// cout<<s->top;
cout<<"please enter a number";
cin>>a;
push(a,s);
pull(w,s);
cout<<w<<endl;
}

作者: liufenghui365   发布时间: 2011-12-11

调用Init(s)之后s本身的值没有变化,要用二级指针。
C/C++ code
int Init(SeqStack **s)
{
    *s=new SeqStack;
    if(*s==NULL)
    {
        cout<<"error";
        return 0;
    }
    else
    {
        cout<<"sucsess!";
        (*s)->top=-1;
        cout<<(*s)->top<<endl;
        return 1;
    }
}

作者: zjs100901   发布时间: 2011-12-11

C/C++ code
#include"stdio.h"
#include"iostream.h"
#define MAXSIZE 100
typedef struct
{
    int top;
    char data[MAXSIZE];
}SeqStack;
int Init(SeqStack **s)
{
    *s=new SeqStack;
    if(*s==NULL)
    {
        cout<<"error";
        return 0;
    }
    else
    {
        cout<<"sucsess!";
        (*s)->top=-1;
        cout<<(*s)->top<<endl;
        return 1;
    }
}
int Empty(SeqStack *s)
{
    if(s->top==-1)
        return 1;
    else
        return 0;
}
int push(char w,SeqStack *s)
{
    if(s->top==MAXSIZE-1)
        return 0;
    else
    {
        s->data[++s->top]=w;
        return 1;
    }
    
}
char pull(char *x,SeqStack *s)
{
    if(Empty(s))
        return NULL;
    else
    {
        *x=s->data[s->top--];
        return *x;
    }
}
char Top(SeqStack *s)
{
    if(Empty(s))
        return 0;
    else return(s->data[s->top]);
}
void main()
{
    char w='\0',a;
    SeqStack *s;
    Init(&s);
    // cout<<s->top;
    cout<<"please enter a number";
    cin>>a;
    push(a,s);
    pull(&w,s);
    cout<<w<<endl;
}

作者: zjs100901   发布时间: 2011-12-11

稍稍改下,供参考
C/C++ code

#include <stdio.h> //规范写法
#include <iostream>  //老的格式,新的编译器不支持
using namespace std;
#define MAXSIZE 100
typedef struct
{
int top;
char data[MAXSIZE];
}SeqStack; 
SeqStack * Init() //init有问题
{
    SeqStack *s;
s=new SeqStack;
if(s==NULL)
{
cout<<"error";
return 0;
}
else
{
cout<<"sucsess!";
s->top=-1;
cout<<s->top<<endl;
return s;
}
}
int Empty(SeqStack *s)
{
if(s->top==-1)
return 1;
else
return 0;
}
int push(char w,SeqStack *s)
{
if(s->top==MAXSIZE-1)
return 0;
else
{
s->data[++s->top]=w;
return 1;
}

}
char pull(SeqStack *s) //x是不会改变的
{
    char x;
if(Empty(s))
return NULL;
else
{
x=s->data[s->top--];
return x;
}
}
char Top(SeqStack *s)
{
if(Empty(s))
return 0;
else return(s->data[s->top]);
}
void main()
{
char w='\0',a;
SeqStack *s=NULL;
s=Init();
// cout<<s->top;
cout<<"please enter a number";
cin>>a;
push(a,s);
w=pull(s);
cout<<w<<endl;
}

作者: keiy   发布时间: 2011-12-11