对于顺序栈,基本的初始化、入栈出栈代码如下,但执行结果为不正常值,小小问题求解答。
#include<stdio.h>
#include<stdlib.h>
#define Maxsize 50
typedef int ElemType;
typedef struct
{
ElemType data[Maxsize];
int top;
}SqStack;
void InitStack(SqStack& S) //初始化栈
{
S.top = -1;//使栈为空
}
bool StackEmpty(SqStack S) //判断栈是否为空
{
if (S.top == -1)
{
return true;
}
else
{
return false;
}
}
bool Push(SqStack &S, ElemType x)//将元素x入栈,并返回是否成功(防止栈满的情况)。
{
if (S.top == Maxsize - 1) //判断是否栈满?满了则入栈失败
{
return false;
}
S.data[++S.top] == x;
return true;
}
bool GetTop(SqStack S, ElemType &m) //获取栈顶元素。
{
if (StackEmpty(S))
{
return false; //如果栈为空,则无栈顶元素
}
m = S.data[S.top]; //取栈顶元素
return true;
}
bool Pop(SqStack S, ElemType& m) //弹出栈顶元素
{
if (StackEmpty(S))
{
return false; //如果栈为空,则无栈顶元素
}
m = S.data[S.top--];
return true;
}
int main()
{
SqStack S;
InitStack(S); //初始化栈
Push(S, 1); //元素入栈
Push(S, 2);
Push(S, 3);
bool flag;
flag = StackEmpty(S);
if (flag == true)
{
printf("栈是空的!\n");
}
ElemType m;
flag = GetTop(S, m);
if (flag == true)
{
printf("栈顶元素为:%d\n", m);
}
flag = Pop(S, m);
if (flag)
{
printf("弹出的元素为:%d\n", m);
}
return 0;
}
运行结果如下:
入栈里面 S.data[++S.top] == x; 多了一个=
#include<stdio.h>
#include<math.h>
void Fun(int n)
{
int i=0;
int t=n;
int m=n;
do
{
i++;
n/=10;
}while(n!=0);
printf("%d是%d位数\n",m,i);
printf("正序输出:\n");
int s=pow(10.0,i-1);
for(int j=0;j<i;j++)
{
printf("%d",t/s);
t%=s;
s/=10;
}
printf("\n");
printf("逆序输出\n");
do
{
printf("%d",m%10);
m/=10;
}while(m!=0);
printf("\n");
}
int main()
{
Fun(201);
Fun(10);
Fun(20000);
return 0;
}