一个关于堆栈的问题

c765314747 2012-11-12 09:50:00
可以编译 运行时停止工作
求教啊
#include <stdio.h>
#include <stdlib.h>
#define StackSize 10
typedef struct{
int data[StackSize];
int top;
}SeqStack;
void InitStack(SeqStack *S)
{
S->top=-1;
}
int StackEmpty(SeqStack *S)
{
return S->top==-1;
}
int StackFull(SeqStack *S)
{
return S->top==StackSize-1;
}

void Push(SeqStack *S,int x)
{
if(StackFull(S))
printf("Stack overflow");
S->data[++S->top]=x;//栈顶指针加1后将x入栈
}
char Pop(SeqStack *S)
{
if(StackEmpty(S))
printf("Stack underflow");
return S->data[S->top--];//栈顶元素返回后将栈顶指针减1
}
SeqStack ReverseString(SeqStack *S) //逆转函数
{
int i,A[StackSize];
SeqStack *K;
InitStack(K);
for(i=0;!StackEmpty(S);i++) //{Push(K,Pop(S));}
{A[i]=Pop(S);}
for(i=0;A[i]!='\0';i++){Push(S,A[i]);}
//return *K;
}
void PrintStack(SeqStack *S)
{
int i;
printf("栈中元素为:");
for(i=S->top;i>=0;--i)
printf("%d ",S->data[i]);
printf("\n");
}
int main()
{
SeqStack *Stack;
char ch;
printf("ENTER");
InitStack(Stack);
while((ch=getchar())!='\n'){Push(Stack,ch);}
PrintStack(Stack);
ReverseString(Stack);
PrintStack(Stack);
system("pause");
return 0;
}


...全文
215 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
c765314747 2012-11-12
  • 打赏
  • 举报
回复
引用 2 楼 azzbcc 的回复:
断的原因是你初始化函数没给栈分配内存空间,所以S->top = 1不能执行
我二了以为顺序栈不用分配了
14号选手 2012-11-12
  • 打赏
  • 举报
回复
动态的分配一个空间吧
转角天边 2012-11-12
  • 打赏
  • 举报
回复
肯定是指针非法访问内存了
azzbcc 2012-11-12
  • 打赏
  • 举报
回复
断的原因是你初始化函数没给栈分配内存空间,所以S->top = 1不能执行
海风林影 2012-11-12
  • 打赏
  • 举报
回复
没仔细看你的代码,但这段代码
    char ch;
    printf("ENTER");
    InitStack(Stack);
    while((ch=getchar())!='\n'){Push(Stack,ch);}
我猜你是控制台输入"ENTER" 之后敲了一个回车键, 这会被第4行 ch = getchar() 读入,这样while() 循环结束了.....
内容概要:本文系统研究了双环模型预测控制(MPC)在表贴式永磁同步电机(SPMSM)中的应用,聚焦于转速-电流双环控制结构的建模与Simulink仿真实现。通过建立电机的离散化数学模型,结合模型预测控制理论,详细阐述了预测模型构建、目标函数设计、约束条件处理及优化求解等核心环节,实现了对电机转速与电流的高性能动态调控。研究在Simulink环境中搭建了完整的仿真系统,验证了所提控制策略在动态响应速度、抗干扰能力及稳态精度方面的显著优势,充分展现了MPC在高精度电机驱动领域的应用潜力,为先进电机控制技术的工程化提供了有效的理论依据与实践参考。; 适合人群:具备自动控制理论、电机控制基础知识及Simulink仿真操作经验的电气工程、自动化、电力电子等相关专业的研究生、科研人员和工程技术人员。; 使用场景及目标:①用于高校及科研机构开展先进电机控制算法的教学演示与科研攻关;②为工业界中对高动态性能、高精度要求的电机驱动系统(如数控机床、机器人、新能源汽车电驱动系统)的设计与优化提供技术验证平台;③支撑永磁同步电机在高端制造、绿色能源等战略新兴产业中的先进控制技术研发。; 阅读建议:读者应结合提供的Simulink仿真模型进行深入探究,重点关注预测时域、控制时域、权重系数等关键参数的整定方法及其对系统整体性能的影响机制,建议通过设置不同工况、引入外部扰动等方式进行对比仿真实验,以深化对模型预测控制内在机理的理解与掌握。
内容概要:本文围绕“基于多VSG独立微网的多目标二次控制MATLAB模型研究”展开,详细阐述了利用Simulink对多虚拟同步发电机(VSG)构成的独立微网系统进行建模与仿真,实现频率调节、电压支撑与有功无功功率均分等多目标协同优化的二次控制策略。研究引入先进的最优控制算法,解决微网在孤岛运行模式下的功率动态分配、频率电压恢复及系统稳定性问题,并通过MATLAB/Simulink平台构建完整仿真模型,验证所提控制策略在不同负载扰动下的有效性、鲁棒性与动态响应性能。; 适合人群:具备电力系统分析、现代控制理论基础以及MATLAB/Simulink仿真能力的电气工程、自动化等相关专业的硕士研究生、科研人员及从事微网控制系统开发的工程技术人才。; 使用场景及目标:① 深入理解多VSG在独立微网中的并联运行机理与协同控制架构;② 掌握基于Simulink的微网二次控制系统的建模方法与仿真流程;③ 实现频率、电压与功率分配的多目标优化控制仿真验证;④ 为微网控制系统的设计、算法优化及科研课题提供可靠的仿真依据和技术参考。; 阅读建议:建议读者结合文中控制策略,动手搭建Simulink模型,重点关注控制器参数整定对系统动态性能的影响,可通过对比不同工况下的仿真结果,进一步优化控制算法以提升系统鲁棒性与响应精度。
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧