/*
实验内容:
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++;
}
我不知道你是不是没写完还是其它什么原因,里面有很多东西都还没有写。
主要是你的函数放在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++;
}
主函数里的S,x,都没有定义,没有定义这个类型StackNode