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 。

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

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况