数据结构栈打印函数(打印函数为什初始为地址base+1,为base打印不正确)?

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAXSIZE 10
#define OWERFLOW -2
typedef struct stack
{
    int *base;
    int *top;
    int stacksize;
}sqstack;

void Initstack(sqstack*s)
{
    (*s).base=(int*)malloc(MAXSIZE);
    if(!(*s).base) exit(OWERFLOW);
    (*s).top=(*s).base;
    (*s).stacksize=MAXSIZE;
    printf("已完成初始化!\n");
}

int  Emptystack(sqstack s)
{
    if(s.top==s.base)
    {
        printf("栈空!\n");
        return true;
    }
    else
    return false;    
}

int Lengthstack(sqstack s)
{
    return s.top-s.base;
}

void Clearstack(sqstack s)
{
    if(s.base)
        s.top=s.base;
    printf("栈已清空!\n");
}

void Destroystack(sqstack *s)
{
    if((*s).base)
    {
        free ((*s).base);
        (*s).stacksize=0;
        (*s).base=(*s).top;
    }
    printf("栈已销毁!\n");
}

void push(sqstack*s,int e)
{
    if((*s).top-(*s).base==(*s).stacksize)
    {
        printf("栈满!\n"); 
    }
    else
    {
        (*s).top++;
        *(*s).top=e;
    }
}

void pop(sqstack *s,int *e)
{
    if((*s).top==(*s).base)
    {
        printf("栈空!\n");
    }
    else
    {
        (*e)=*(*s).top;    
        (*s).top--;    
    }
}

void print(sqstack s)
{
    int i=0;
    printf("元素:");
    int*p=s.base+1;
    for(i=0;i<Lengthstack(s);i++)
    {
        printf("%d ",*(p+i));
    }
    printf("\n") ;
}

int main()
{
    int arr[5]={1,2,3,4,5};
    int i,e;
    sqstack S;
    Initstack(&S);
    Emptystack(S);
    for(i=0;i<5;i++)
    {
        push(&S,*(arr+i));
    }
    print(S);
    printf(    "栈长:%d\n",Lengthstack(S));
    pop(&S,&e); 
    printf("出栈元素为%d\n",e);
    print(S);
    printf(    "栈长:%d\n",Lengthstack(S));
    return 0;
}
阅读 2.3k
1 个回答
✓ 已被采纳
void push(sqstack* s, int e)
{
    if ((*s).top - (*s).base == (*s).stacksize)
    {
        printf("栈满!\n");
    }
    else
    {
        (*s).top++;
        *(*s).top = e;
    }
}

问题在push函数里,入栈操作时,先对栈顶指针进行了自增

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进