为什么弹栈总是失败?
 #include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct Node 
{
    int data;
    struct Node *pNext;
}NODE,*PNODE;
typedef struct Stack
{
    PNODE pTop;
    PNODE pBottom;
}STACK,*PSTACK;
void init(PSTACK pS);//栈的初始化,做一个空栈
void push(PSTACK pS,int val);//对栈进行压入元素
void traverse(PSTACK pS);//对栈进行遍历
bool pop(PSTACK pS,int *pval);//弹出栈的元素,并且记录元素的值
bool empty(PSTACK pS);
int main()
{
    PSTACK pS=(PSTACK)malloc(sizeof(STACK));
    int val;
    init(pS);
    push(pS,1);
    push(pS,2);
    push(pS,3);
    pop(pS,&val);
    traverse(pS);
    printf("弹出栈的元素为%d\n",val);
    traverse(pS);
    return 0;
}
void init(PSTACK pS)
{
    pS->pTop=(PNODE)malloc(sizeof(NODE));
    pS->pBottom=pS->pTop;
    pS->pBottom->pNext=NULL;
}
void push(PSTACK pS, int val)
{
    PNODE pNew=(PNODE)malloc(sizeof(PNODE));
    pNew->pNext=pS->pTop;
    pNew->data=val;
    pS->pTop=pNew;
}
void traverse(PSTACK pS)
{
    PNODE p=(PNODE)malloc(sizeof(NODE));
    p=pS->pTop;
    while(p!=pS->pBottom)
    {
        printf("数据为%d\n",p->data);
        p=p->pNext;
    }
}
bool empty(PSTACK pS)
{
    if(pS->pTop==pS->pBottom)
    {
        return true;
    }
    else
    {
        return false;
    }
}
bool pop(PSTACK pS,int *pval)
{
    if(empty(pS))
    {
        return false;
    }
    else
    {
        PNODE r=(PNODE)malloc(sizeof(NODE));
        *pval=pS->pTop->data;
        r=pS->pTop;
        pS->pTop=pS->pTop->pNext;
        free(r);
        r=NULL;
        return true;
    }
}

为了让C可以使用bool类型,该源码在CPP下运行

1个回答

push()里面新建节点的sizeof()里面的类型写为Node 。

gzdrn
gzdrn 谢啦~
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!