#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 30
typedef struct
{
int data[MAXSIZE];
int top;
}SqStack;
void InitStack(SqStack *&S)
{
S = (SqStack *)malloc(sizeof(SqStack));
S->top = -1;
printf("顺序栈----初始化成功\n");
}
void StackEmpty(SqStack *S)
{
if(S->top == -1)
{
printf("该栈为空栈\n");
}
else
{
printf("该栈不为空栈\n");
}
}
int Push(SqStack *S,int e)
{
if(S->top == MAXSIZE - 1)
{
printf("栈溢出\n");
}
S->top++;
S->data[S->top] = e;
return S->data[S->top];
}
int Pop(SqStack *S,int &e)
{
if(S->top == -1)
{
printf("栈溢出");
}
e = S->data[S->top];
S->top--;
return e;
}
int GetTop(SqStack *S,int &e)
{
if(S->top == -1)
{
printf("栈溢出");
}
e = S->data[S->top];
return e;
}
void DestoryStack(SqStack *S)
{
free(S);
}
void Trans(SqStack *S,int n)
{
int i = n;
if(n != 0)
{
while(n>0)
{
Push(S,n%2);
n /= 2;
}
}
else
{
Push(S,n);
}
int e;
printf("%d转换为二进制为:",i);
while(S->top > -1)
{
printf("%d",Pop(S,e));
}
}
int main()
{
SqStack *S;
printf("========实现栈的ADT========\n\n");
InitStack(S);
char c;
printf("是否查询该栈是否为空栈(是/Y)?\n");
scanf("%c",&c);
if(c=='Y')
{
StackEmpty(S);
}
int e;
printf("\n请输入一个要入栈的元素:");
scanf("%d",&e);
printf("入栈 %d\n",Push(S,e));
printf("取栈顶元素 %d\n",GetTop(S,e));
printf("出栈 %d\n",Pop(S,e));
printf("\n========实现二进制的转换========\n\n");
int n;
InitStack(S);
printf("请输入一个要转换的数字(0-99):");
scanf("%d",&n);
while(n<0 || n >99)
{
printf("请重新输入一个数字(0-99):");
scanf("%d",&n);
}
Trans(S,n);
DestoryStack(S);
}
C语言实现顺序栈的ADT 与 利用栈实现二进制转换
猜你喜欢
转载自blog.csdn.net/The_RedMaple/article/details/109237268
今日推荐
周排行