C_Cpuls 2022-10-20 09:24 采纳率: 85.7%
浏览 27
已结题

C语言malloc,zsbd

问题遇到的现象和发生背景
用代码块功能插入代码,请勿粘贴截图
//【任务2】在提示/**********blank**********/下面填写合适的内容完成算法设计,并上机调试程序。已知需要建立一个空的链栈,建立成功后元素依次入栈,s={56,89,71,25,69,48},请将下面程序补充完整。
#include <stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
typedef int ElemType;
//定义链栈结点类型
typedef struct node
{
    ElemType data;
    struct node *next;
}StackNode,*LinkStack;

//初始化链栈
void InitStack(LinkStack top)
{    
    top=(LinkStack)malloc(sizeof(StackNode));
    top->next = NULL;
}

//元素入栈
int Push(LinkStack top, ElemType x)
{
    StackNode *NewNode;
    //blank1:为结点NewNode分配存储空间
    NewNode=( StackNode *)malloc(sizeof (struct node));
    if(NewNode==NULL)        return (FALSE);
    //blank2:将数据x放入到结点NewNode的数据域中
    NewNode->data=x;
    //blank3:头结点top的后继作为结点NewNode的后继
    NewNode->next=top;
    //blank4:结点NewNode作为头结点top的新后继
    top->next=NewNode->next;
    return (TRUE);
}

//元素出栈
int Pop(LinkStack top, ElemType *x)
{
    StackNode *DelNode;
    DelNode=top->next;    //指针DelNode指向删除结点
    if(DelNode==NULL)    //栈空
        return (FALSE);
    *x=DelNode->data;
    /**********blank**********/
    //blank5:被删除结点的后继成为头结点top的后继
    top->next=top->next->next;
    //blank6:释放删除结点的存储空间
    free(top->next);
    return (TRUE);
}

//输出栈内的元素
void PrintStack(LinkStack top)
{
    StackNode *p = top->next;
    while(p!=NULL)
    {
        printf("data=%d\t\t",p->data);
        printf("address=%d\n",p->next);
        p = p->next;
    }
}

void main()
{
    LinkStack top;
    int count,i,result;
    ElemType x;
    //函数声明
    void InitStack(LinkStack top);
    int Push(LinkStack top, ElemType x);
    int Pop(LinkStack top, ElemType *x);
    void PrintStack(LinkStack top);
    printf("链栈初始化...\n");
    InitStack(top);       //调用初始化函数
    printf("初始化完成\n");
    printf("\n输入需要入栈的元素个数:");
    scanf_s("%d",&count);
    for(i=1;i<=count;i++) 
    {
        printf("输入第%d个入栈的元素:",i);
        scanf_s("%d",&x);
        result=Push(top, x);    //调用入栈函数
        if(result==1)
            printf("当前元素入栈成功\n");
        else
            printf("存储空间分配失败,当前元素无法入栈\n");
    }
    printf("\n入栈完毕,输出当前栈内元素\n");
    PrintStack(top);
    result=Pop(top,&x);            //调用出栈函数
    if(result==1)
    {
        printf("\n出栈成功,出栈的栈顶元素值为%d,输出当前栈内元素\n",x);
        PrintStack(top);        //调用输出函数
    }
    else
        printf("\n栈空,无法出栈\n");
}
运行结果及报错内容

使用了未初始化的局部变量“top”

我想要达到的结果

展开全部

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2022-10-20 09:28
    关注

    StackNode *NewNode=(StackNode *)malloc(sizeof (struct node));
    struct node就是StackNode,两者相同。但没有struct StackNode这个东西

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    C_Cpuls 2022-10-20 09:36

    谢谢,懂了这个。
    我修改27行后: *NewNode=(struct StackNode *)malloc(sizeof (struct node));
    出现: 二进制“=”: 没有找到接受“Push::StackNode *”类型的右操作数的运算符(或没有可接受的转换

    回复
    快乐鹦鹉 回复 C_Cpuls 2022-10-20 09:39

    InitStack(&top); //调用初始化函数
    这个函数调用就是个错的

    回复
    快乐鹦鹉 回复 C_Cpuls 2022-10-20 09:41

    void InitStack(LinkStack *top);
    main中的函数申明和上面的函数实现中参数不一样啊

    回复
    展开全部7条评论
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 11月22日
  • 已采纳回答 11月15日
  • 修改了问题 10月20日
  • 修改了问题 10月20日
  • 展开全部
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部