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



