gzdrn 2015-08-08 06:41 采纳率: 0%
浏览 1527
已采纳

为什么弹栈总是失败?

 #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 。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型