gzdrn
2015-08-08 06:41
采纳率: 62.5%
浏览 1.5k
已采纳

为什么弹栈总是失败?

 #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条回答 默认 最新

  • 纵横车 2015-08-08 07:21
    已采纳

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

    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题