问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言不知道哪理出错了,不能运行,结果出不来

发布网友 发布时间:2022-05-27 02:46

我来回答

4个回答

热心网友 时间:2024-12-01 13:21

帮你改了一下。

/*--------头文件和宏定义------------*/

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

#define TUSE 1

#define FLASE 0

#define FLAG '0'

/*--------数据存储结构定义------------*/

typedef char ElemType;

typedef struct StackNode

{

ElemType data;//数据域

struct StackNode *next;    //指针域

} StackNode,*LinkedStack;

/*-----------函数定义和实现------------*/

/*----------链栈的初始化操作-----------*/

LinkedStack LinkedStackInit()

{

LinkedStack top= new StackNode();        

    top->next = NULL;                //构造一个不带头结点的空栈,栈顶指针为top

return top;

}

/*----------链栈的判空操作-----------*/

int LinkedStackEmpty(LinkedStack top)

{

return(top==NULL);          //思考:与顺序栈的判空算法比较

}

/*----------链栈的栈长操作-----------*/

int LinkedStackLength(LinkedStack top)

{

 

 int count;

 

 count=0;

 LinkedStack hp = top;

 while(hp != NULL)

 { 

 count++;

 hp=hp->next;

 }

 return count;

 }

//自行设计此程序

 

/*----------链栈的入栈操作-----------*/

LinkedStack LinkedStackPush(LinkedStack top,ElemType x)

{StackNode *s;

s->data=x;//参考课本设计此程序

s->next=top;

top=s;

return top;

}

/*----------链栈的出栈操作-----------*/

ElemType LinkedStackPop(LinkedStack &top)  //注意其参数形式

{

LinkedStack p;

ElemType x;

if (top==NULL)                 //栈空的情况

  printf("栈已空,不能出栈\n");

p=top;             //p指向第一个数据结点

x=top->data;

top=top->next;

free(p);

p = NULL;

return x;

}

/*----------链栈的取元素操作-----------*/

ElemType LinkedStackGetTop(LinkedStack top )

{

if (top==NULL)               //栈空的情况

printf("栈已空,不能出栈\n");

return (top->data);

}

/*----------输出整个栈元素的操作-----------*/

void LinkedStackOutput(LinkedStack top)

{

LinkedStack p=top;

    printf("此栈中的元素由栈顶开始依次为:\n ");

while (p!=NULL)

{

printf("%c ",p->data);

p=p->next;

}

printf("\n");

}

/*----------主函数-----------*/

void main()

{

//初始化链栈A

    LinkedStack A,B;

printf("初始化栈A\n");                             

A=LinkedStackInit();

    printf("请将元素依次进栈\n");    //元素依次进栈 

ElemType x;   

scanf("%c",&x);  

LinkedStack newp = NULL;

if ((newp = new StackNode()) == NULL)

{

printf("apply memory error");

exit(1);

}

    newp->data = x;

newp->next = NULL;

A = newp;

getchar();

B = A;

while(x!=FLAG)

{

 scanf("%c",&x);  

LinkedStack newp = NULL;

    if ((newp = new StackNode()) == NULL)

{

   printf("apply memory error");

   exit(1);

}

    newp->data = x;

    newp->next = NULL;

    B->next = newp;

B = B->next;

getchar();

}

LinkedStackOutput(A);

    printf("栈长度:%d\n",LinkedStackLength(A));           //输出栈的长度

    printf("栈顶元素为:%c\n",LinkedStackGetTop(A ));       //取出栈顶元素

    printf("元素出栈,出栈元素为%c\n",LinkedStackPop(A));  //元素出栈

    printf("元素出栈,出栈元素为%c\n",LinkedStackPop(A));

    LinkedStackOutput(A);

 

 printf("此时栈为%s\n",(LinkedStackEmpty(A)?"空":"非空"));   //判栈是否为空          

}

热心网友 时间:2024-12-01 13:21

LinkedStack LinkedStackInit()
{
LinkedStack top;
top=NULL; //构造一个不带头结点的空栈,栈顶指针为top
return top;
}
这是你定义的链表初始化函数,这个初始化函数调用之后我们知道A的值应该是NULL,那么通过这个初始化函数之后A的值还是一个NULL,你后面操作A->next是不是有问题呢
另外在程序里面A = A->next; A->data = x; 这样也不可行,就算这两个语句之前A指向的是有效的内存,A->next应该还是无效的内存,A->next=x;应该还会出错
针对这个问题的解决办法是在每次添加数据之前都应该给链表添加一个节点,然后给这个节点的data成员
具体的解决办法是:
将循环体
while(x!=FLAG)
{
A=A->next ;
A->data =x;
}
改成
while(x!=FLAG)
{
if(A==NULL){
A =(StackNode*)malloc(sizeof(StackNode));
A->data =x;
A->next = NULL;
}
else{
(StackNode*)pHead = A;
A =(StackNode*)malloc(sizeof(StackNode));
A->data = x;
A->next = pHead;
}
}

热心网友 时间:2024-12-01 13:21

初始化栈后得到的A的值是NULL啊,你之后的元素进栈往哪进?A=A->next,空指针哪有next
而且我全程都没有看到你有生成新结点的操作,你怎么构造一个栈出来?

热心网友 时间:2024-12-01 13:22

代码有问题
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
江西蓝天学院和赣江职业技术学院哪个好? 江西有什么好的中专学校 什么是单点登录(SSO),以及单点登录的实现流程 前端实现单点登录(SSO) 前端单点登录如何实现 面试官:来说说单点登录的三种实现方式 为什么很多人不买哈弗H9 座机如何开通国内长途 座机如何申请 辽宁省出租车手续怎么办? 数据结构填空题 自学数据结构,求大神指导~蟹蟹 退伍军人可以创业的小项目? 微信附近人。100公里的 我老公微信附近的人显示100公里以内的人,我的怎么不可以,而且我们站在... 一个三角形的底是5米,如果底延长2米,那么面积就增加3平方米.原来三角形... 一个三角形的底长5米,如果底延长1米,那么面积就增加3米.那么原来三角形... 怎样才可以查附近一百公里微信好友 一个三角形的底是5米,如果将它延长1米,面积就增加1.5平方米(如图)。原 ... 一个三角形的底是5米.如果将底延长1米,面积就增加2平方米,原来三角形... 怎么让微信显示100公里的附近人 —个三角形的底长是5m,如果底边延长1m.那么面积就增加1、5平方米... ...可以搜索范围有多少公里?我朋友可以搜索到100公里,我竟然只能搜到10... 一个圆形花坛的半径是5米,现在要扩建花坛,将半径增加1米,这时花坛的占 ... ...而我朋友的手机可以搜索到一百公里之外的?怎么回事? 一个三角形花圃的底是6m高是5m+如果每株花占地4平方分米+那么这个花圃... 一个三角形的底长是5m,如果底边延长1m,那么面积就增加1.8平方米,原... 一个三角形的底是5m。如果底延长1m,那么面积就增加1.5m2原三角形的面... 一个三角形的底是5m 如果底边延长1m 面积就增加1.5平方米 原来三角形... 一个三角形的底边长为5m,如果底延长1m,面积就增加3.25平方米,原三角... 求这试验答案 iphone充电器显示不支持此配件 长沙奶茶加盟店有哪些品牌 请问长沙加盟奶茶店选择哪个品牌好?求大神解答! 长沙茶颜悦色未开门就已排起长队,茶颜悦色为何如此受欢迎? 淋巴结稍大,严重吗? 甲状腺癌术后 左颈部部分淋巴结稍大 甲状腺肿大,脖子左侧淋巴增大,请医生详细讲解一下 B超显示双侧颈部淋巴结稍肿大 大血管旁可见多个不均质低回声区界尚清... 跪求:甲状腺结节 伴有 淋巴结肿大,烦请大师医生给些分析和意见!万分感 ... 甲状腺淋巴结肿大需要手术吗? 甲状腺双侧叶多发结节伴钙化 ,颈部淋巴结稍大。求救怎么治疗怎么办... 甲状腺右侧颈部淋巴结肿大 检查淋巴甲状腺多个低回声结节,颈部淋巴结增大,是什么病啊 颈部淋巴结肿大,甲状腺结节怎么回事? 怎么查自己的绑定了哪个手机号 该怎么查看创建的手机号码 怎么查看自己的,不是手机号码吗 微信怎么识别手机号码是 丰都东和美容美发剪头发可以吗