/*
实验内容:
1.利用数组建立并初始化一个顺序栈,并将此栈中各元素的值依次输出;
2.当栈不满时将一个新元素入栈,并依次输出此时栈中各元素的值。
3.当栈不空时将栈顶元素出栈,并输出此时栈中各元素的值。
实验要求:
栈的最大空间为10个元素单元,栈中已有部分元素,栈中元素值的类型为字符型。
要求新入栈的元素可以从键盘输入。
当操作不合理或不能完成时,程序应能处理并输出相应信息。
带星号的第3项实验内容为选作内容。
*/
#include<stdio.h>
#include<stdlib.h> //需要的头文件
typedef char StackData;
typedef struct
{
StackData *base;
StackData *top;
int stacksize;
} SeqStack; //说明顺序栈的结构体变量类型
void main()
{
Create_Stack(S);
printf("顺序栈中已有的元素值为:\n");
Print_Stack(S);
printf("\n请输入要入栈的新元素值:\n");
scanf("%c",&x);
Push(S,x); //将新元素x入栈
printf("新元素入栈后栈中元素的值为:\n");
Print_Stack(S);
}
void Create_Stack(S)//初始化建立顺序栈
{
S.base=(StackData*)malloc(10*sizeof(StackData));
S.top=S.base;
S.stacksize=10;
char a[10]={'a','b','c','d','e','f','g','h'};
int i;
for(i=0;i<=9;i++)
{
*S.top=a[i];
S.top++;
}
}
void Print_Stack(S)//依次输出栈中各元素的值
{
StackNode *p;
p=S.base;
while(p<S.top)
{
printf("%c ",*p);
p++;
}
}
void Push(SeqStack S,StackData x) //将新元素x入栈
{
if(StackFull(S))
{
S.base=(StackData*)realloc(S.base,(S.stacksize+10)*sizeof(StackData));
if(!S.base) exit(overflow);//追加存储空间失败
S.top=S.base+S.stacksize;
S.stacksize+=10;
}
*S.top=x;
S.top++;
}
数据结构顺序栈代码,老是报错,求大神帮忙看一下哪里有问题。
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 浅草夏洛洛 2019-04-20 21:59关注
我不知道你是不是没写完还是其它什么原因,里面有很多东西都还没有写。
主要是你的函数放在main后面,前面要加声明还有就是一些变量没有声明。我只改了你的语法问题,Stackfull()还没有写。
下面是代码/* 实验内容: 1.利用数组建立并初始化一个顺序栈,并将此栈中各元素的值依次输出; 2.当栈不满时将一个新元素入栈,并依次输出此时栈中各元素的值。 3.当栈不空时将栈顶元素出栈,并输出此时栈中各元素的值。 实验要求: 栈的最大空间为10个元素单元,栈中已有部分元素,栈中元素值的类型为字符型。 要求新入栈的元素可以从键盘输入。 当操作不合理或不能完成时,程序应能处理并输出相应信息。 带星号的第3项实验内容为选作内容。 */ #include<stdio.h> #include<stdlib.h> //需要的头文件 #define overflow -1 typedef char StackData; typedef struct { StackData *base; StackData *top; int stacksize; } SeqStack; //说明顺序栈的结构体变量类型 void Create_Stack(SeqStack S); //初始化建立顺序栈 void Print_Stack(SeqStack S); //依次输出栈中各元素的值 void Push(SeqStack S,StackData x); //将新元素x入栈 int StackFull(SeqStack S); int main() { char x; SeqStack S; Create_Stack(S); printf("顺序栈中已有的元素值为:\n"); Print_Stack(S); printf("\n请输入要入栈的新元素值:\n"); scanf("%c",&x); Push(S,x); //将新元素x入栈 printf("新元素入栈后栈中元素的值为:\n"); Print_Stack(S); return 0; } void Create_Stack(SeqStack S)//初始化建立顺序栈 { S.base=(StackData*)malloc(10*sizeof(StackData)); S.top=S.base; S.stacksize=10; char a[10]={'a','b','c','d','e','f','g','h'}; int i; for(i=0;i<=9;i++) { *S.top=a[i]; S.top++; } } void Print_Stack(SeqStack S)//依次输出栈中各元素的值 { StackData *p; p=S.base; while(p<S.top) { printf("%c ",*p); p++; } } void Push(SeqStack S,StackData x) //将新元素x入栈 { if(StackFull(S)) { S.base=(StackData*)realloc(S.base,(S.stacksize+10)*sizeof(StackData)); if(!S.base) exit(overflow);//追加存储空间失败 S.top=S.base+S.stacksize; S.stacksize+=10; } *S.top=x; S.top++; }
解决 无用评论 打赏 举报
悬赏问题
- ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
- ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
- ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
- ¥20 腾讯企业邮箱邮件可以恢复么
- ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
- ¥15 错误 LNK2001 无法解析的外部符号
- ¥50 安装pyaudiokits失败
- ¥15 计组这些题应该咋做呀
- ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
- ¥15 让node服务器有自动加载文件的功能