动态分配顺序存储结构
#define Max 100
#define ElemType char
typedef struct{
ElemType *Data;
int Top;
}StackSq;
基本操作
初始化
void StackSq_Init(StackSq &S){
S.Data=(ElemType *)malloc(sizeof(char)*Max);
S.Top=-1;
if(S.Data==NULL){
printf("初始化失败\n");
exit(-1);
}
else{
printf("初始化成功\n");
}
}
创建栈
void StackSq_Creat(StackSq &S){
if(S.Top+1==Max){
printf("创建栈失败\n");
}
printf("输入栈成员个数:");
int num=0;
scanf("%d",&num);
getchar();
while(S.Top+1<num){
printf("请输入入栈成员%d:\n",S.Top+2);
scanf("%c",&S.Data[++S.Top]);
getchar();
}
}
入栈
void StackSq_Push(StackSq &S,ElemType newval){
if(S.Top+1==Max){
printf("栈满,入栈失败\n");
exit(-1);
}
else{
S.Data[++S.Top]=newval;
printf("入栈成功\n");
}
}
出栈
void StackSq_Pop(StackSq &S,ElemType &x){
if(S.Top==-1){
printf("栈空,出栈失败\n");
exit(-1);
}
else{
x=S.Data[S.Top--];
printf("出栈成功\n");
}
}
读取栈顶元素
ElemType StackSq_GetTopval(StackSq S){
if(S.Top==-1){
printf("栈空,读取栈顶元素失败\n");
exit(-1);
}
else{
printf("读取栈顶元素成功\n");
return S.Data[S.Top];
}
}
求栈长度
int StackSq_Length(StackSq S){
return S.Top+1;
}
判空
void StackSq_Isvoid(StackSq S){
if(S.Top !=-1){
printf("栈不为空\n");
}
else{
printf("栈为空\n");
}
}
打印栈
void StackSq_Print(StackSq S){
if(S.Top !=-1){
while(S.Top!=-1){
printf("%c ",S.Data[S.Top--]);
}
printf("打印成功\n");
}
else{
printf("打印失败\n");
}
}
代码实现结果
int main()
{
StackSq S;
StackSq_Init(S);
StackSq_Creat(S);
StackSq_Isvoid(S);
StackSq_Print(S);
ElemType a;
StackSq_Pop(S,a);
StackSq_Print(S);
printf("栈长度为:%d\n", StackSq_Length(S));
StackSq_Push(S,a);
StackSq_Print(S);
printf("栈顶元素为:%c\n", StackSq_GetTopval(S));
}