#0include <stdio.h>
#include <stdlib.h>
#define A 100
struct SqStack {
int *top;
int *base;
};
bool init(SqStack *S);
bool push(SqStack &S, int val);
void printStack(SqStack S);
bool pop(SqStack &S, int &val);
bool getTop(SqStack S, int &val);
int getLen(SqStack S);
void conversion8(int N);
void conversion2(int N);
void conversion16(int N);
void conversion4(int N);
int main() {
printf("应用\n\n");
SqStack S;
if (init(&S))
printf("初始化成功!\n\n");
else
exit(1);
system("pause");
printf("请输入元素个数:");
int num, val;
scanf("%d", &num);
for (int i = 1; i <= num; i++) {
printf("请输入第%d个元素:", i);
scanf("%d", &val);
push(S, val);
}
printf("STACK长度为%d\n\n", getLen(S));
system("pause");
int popVal = -1;
if (pop(S, popVal)) {
printf("出STACK成功!弹出的元素是:%d\n\n", getLen(S));
}
system("pause");
int topVal = -1;
if (getTop(S, topVal)) {
printf("查找STACK-TOP成功!TOP元素是:%d\n\n", topVal);
printf("STACK长度为%d\n\n", getLen(S));
}
system("pause");
int N;
printf("欢迎使用进制转换器!\n请输入你想使用的进制转换(2,4,8,16):\n");
for (int i = 1; i++;) {
int p, q;
scanf("%d", &p);
switch (p) {
case 2: {
printf("请输入你想转换的数字(支持十进制转换二进制):");
scanf("%d", &N);
printf("转换后的结果是:\n");
conversion2(N);
printf("\n");
}
break;
case 8: {
printf("请输入你想转换的数字(支持十进制转换八进制):");
scanf("%d", &N);
printf("转换后的结果是:\n");
conversion8(N);
printf("\n");
}
break;
case 16: {
printf("请输入你想转换的数字(支持十进制转换十六进制):");
scanf("%d", &N);
printf("转换后的结果是:\n");
conversion16(N);
printf("\n");
}
break;
case 4: {
printf("请输入你想转换的数字(支持十进制转换四进制):");
scanf("%d", &N);
printf("转换后的结果是:\n");
conversion4(N);
printf("\n");
}
break;
default:
printf("继续请按1,退出请按0\n请输入你的选择:");
}
printf("继续请按1,退出请按0\n请输入你的选择:");
scanf("%d", &q);
if (q == 1) {
printf("请输入你想使用的进制转换(2,4,8,16):\n");
}
if (q == 0)
break;
}
return 0;
}
bool init(SqStack *S) {
S->base = S->top = (int *)malloc(A * sizeof(int));
if (S->top == NULL)
return false;
else
return true;
}
bool push(SqStack &S, int val) {
/
if (S.top - S.base >= A)
return false;
*S.top ++ = val;
return true;
}
void printStack(SqStack S) {
printf("遍历结果为:");
int *p = S.base ;
for (; p < S.top ; p++)
printf("%8d", *p);
printf("\n");
}
bool pop(SqStack &S, int &val) {
if (S.top == S.base)
return false;
S.top = S.top - 1;
val = *--S.top ;
return true;
}
bool getTop(SqStack S, int &val) {
if (S.top == NULL )
return false;
val = *(S.top - 1);
return true;
}
int getLen(SqStack S) {
return S.top - S.base ;
}
void conversion8(int N) {
void printStack(SqStack Z);
int val;
SqStack Z;
init(&Z);
while (N > 0) {
push(Z, N % 8);
N = N / 8;
}
while (Z.top != Z.base) {
pop(Z, val);
printf("%d", val);
}
}
void conversion2(int N) {
int val;
SqStack Z;
init(&Z);
while (N > 0) {
push(Z, N % 2);
N = N / 2;
}
while (Z.top != Z.base ) {
pop(Z, val);
printf("%d", val);
}
}
void conversion16(int N) {
int val;
SqStack Z;
init(&Z);
while (N > 0) {
push(Z, N % 16);
N = N / 16;
}
while (Z.top != Z.base ) {
pop(Z, val);
switch (val) {
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", val);
break;
}
}
}
void conversion4(int N) {
int val;
SqStack Z;
init(&Z);
while (N > 0) {
push(Z, N % 4);
N = N / 4;
}
while (Z.top != Z.base ) {
pop(Z, val);
printf("%d", val);
}
}
运行中程序会中断,且转换数位h结果为0或报错。