栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

利用顺序栈进行进制转换,以及反转整数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

利用顺序栈进行进制转换,以及反转整数

#include
#include
#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;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/629333.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号