#陌然 2019-04-21 20:46 采纳率: 50%
浏览 268
已采纳

点击运行的是没有报错,输入的时候程序死了

图片说明

#include<stdio.h>
#include<stdlib.h>
typedef struct stacknode/
{
    int data;
    struct stacknode *next;
}stacknode,*linkstack;
linkstack InitStack(linkstack s);//初始化
int empty(linkstack s);
int Push(linkstack s,int e);//入栈
int Pop(linkstack s);//出栈
int gettop(linkstack s);//取栈顶元素
void print(linkstack s);//打印栈
int destroyStack(linkstack s);
int main()

int main()
{
linkstack s;
int choice,data,e;
s=(linkstack )malloc(sizeof(linkstack));
s=InitStack(s);
while(1)
{
printf("请输入相应数字,选择操作:\n");
printf("1.入栈 2.出栈 3.打印 4.取栈顶元素 5.结束\n");
scanf("%d",&choice);
if(choice!=1&&choice!=2&&choice!=3&&choice!=4&&choice!=5)
{
printf("非法选择!请重新选择:\n");
scanf("%d",&choice);
}
if(choice==1)
{
printf("请输入一个要入栈的数据:");
scanf("%d",&data);
e=data;
Push(s,e);
}
if(choice==2)
{
if(!empty(s))
Pop(s);
else
printf("这是一个空栈!\n");
}
if(choice==3)
{
if(!empty(s))
print(s);
else
printf("这是一个空栈!\n");
}
if(choice==4)
{
if(!empty(s))
gettop(s);
else
printf("这是一个空栈!\n");
}

    if(choice==5)
        return 0;
}

}
linkstack InitStack(linkstack s)//这里的s 是形参
{
s=(linkstack )malloc(sizeof(linkstack));
if (s == NULL)
printf("创建失败");
s->data = 0;
s->next=NULL;
return s;
}
int empty(linkstack s)
{
linkstack p;
p=s->next;
if(p== NULL)
return 1;
else return 0;
}
int Push(linkstack s,int e)
{
linkstack p;
p=(linkstack )malloc(sizeof(linkstack));
p->data=e;
p->next = s->next;
s->next = p;
printf(" %d已入栈\n",e);
return 1;
}
int Pop(linkstack s)
{
linkstack p;
p=(linkstack )malloc(sizeof(linkstack));
p = s->next;
if (!empty(s))
{
s->next = s->next->next;
printf(" %d 已出栈\n",p->data);
free(p);

    //return 1;
}
return 0;

}
int gettop(linkstack s)
{
linkstack p;
p=s->next;
if(p!=NULL)
{
printf("栈顶元素为:");
printf("%d \n",p->data);
}

return p->data;

}
void print(linkstack s)
{
linkstack p;
p=s->next;
printf("栈为:\n");
printf(" top of stack\n");
while(p!=NULL)
{
printf("%8d \n",p->data);
p = p->next;
}
printf(" base of stack \n");
}
int destroyStack(linkstack s)
{
while (!empty(s))
{
Pop(s);
}
printf("栈已销毁!\n");
free(s);
return 0;
}

  • 写回答

1条回答 默认 最新

  • 浅草夏洛洛 2019-04-21 22:39
    关注

    没看到全部代码,不过linkstack一个是创建一个指针吧。
    那么在s=(linkstack )malloc(sizeof(linkstack));只是为s分配了4空间的内存(sizeof(linkstack))

    比如:

    #include <stdio.h>
    #include <string.h>
    #include<stdlib.h>
    typedef struct node *link;
    struct node
    {
        int x;
        long a;
        double b;
        int c[30];
        link next;
    };
    
    int main()
    {
        link L;
        L = (link)malloc(sizeof(link));
        L->next = NULL; //指针不用的时候建议都指向NULL
        printf("%d %d\n",sizeof(link),sizeof(struct node));
    }
    
    
    

    图片说明
    sizeof(link)为4,是指针的所占空间。而sizeof(struct node)才是结构体数组的空间。

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

报告相同问题?

悬赏问题

  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启