#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
int i, n, e, j, x, num;
//顺序栈
#define MAXSIZE 100
typedef struct {
int* top;//栈顶指针
int* base;//栈底指针
int stacksize;//栈可用的最大容量
}SqStack;
//1.顺序栈的初始化
int InitSqStack_S(SqStack& S) {
S.base = (int*)malloc(sizeof(int) * MAXSIZE);
if (!S.base) exit(OVERFLOW);//存储分配失败
S.top = S.base;//栈顶指针等于栈底指针,表示空栈
S.stacksize = MAXSIZE;
return OK;
}
//2.顺序栈的入栈
int SqStackPush_S(SqStack &S, int e) {//将元素e压入栈
if (S.top - S.base == S.stacksize) {//栈满
return ERROR;
}
*S.top = e;//S.top是指针,存放的是地址。*S.top 解码了,就是存放的就是具体的数据
S.top++;//让栈顶往上移一位
return OK;
}
//3.顺序栈的出栈(判断栈空不空,如果不空,则删除栈顶元素,并用e返回其值)
int SqStackPop_S(SqStack& S,int &e) {
if (S.top == S.base) {
return ERROR;
}//栈为空
--S.top;
e = *S.top;
return OK;
}
//4.求栈的长度
int SqStackLength_S(SqStack& S) {
return S.top - S.base;
}
//5.遍历栈(遍历要注意指针的移动)
int SqStackTraverse(SqStack& S) {
if (S.top == S.base) {
printf("栈为空栈");
return ERROR;
}
for (i = S.top - S.base; i > 0; i--) {
S.top--;
printf("%d", * S.top);
}
return 0;
}
//6.判断栈空不空
int SqStackEmpty(SqStack &S) {
if (S.top == S.base) {
return OK;
}
else {
return ERROR;
}
}
//7.十进制转换2.8.16进制
void Conversion(SqStack S) {
printf("请输入要转换的数字:");
scanf("%d", &num);//要转换的数字
printf("\n请输入要转换的进制:");
scanf("%d", &i);//要几进制
while (num!= 0) {
SqStackPush_S(S, num % i);//正常进栈
num = num / i;
}
while (!SqStackEmpty(S)) {
SqStackPop_S(S, e);
switch (e)//出栈的时候,把10用A输出,等类似。
{
case 10:
printf("A");
break;
case 11:
printf("B");
break;
case 12:
printf("C");
break;
case 13:
printf("D");
break;
case 14:
printf("E");
break;
case 15:
printf("F");
break;
default:
printf("%d",e);
break;
}
}
}
//8.数字逆序输出
void Reverse(SqStack& S) {
printf("\n请输入一个整数:");
scanf("%d", &x);
int sum = 0;
while (x!=0) {
sum = sum * 10 + x % 10;//整数倒序输出的公式
x = x / 10;
}
printf("\n整数倒序输出为%d", sum);
}
int main() {
SqStack Sa;//定义一个栈名
InitSqStack_S(Sa);//初始化栈
Conversion(Sa);
Reverse(Sa);
return 0;
}
利用顺序栈进行进制转换,以及反转整数
最新推荐文章于 2022-04-07 22:59:14 发布