顺序栈
#include<iostream>
using namespace std;
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int SElemType;
typedef struct {
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack& S) {
S.base = new SElemType[MAXSIZE];
if (!S.base)exit(OVERFLOW);
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
Status Push(SqStack& S, SElemType e) {
if ((S.top - S.base) == S.stacksize) {
delete[] S.base;
S.base = new SElemType[2 * MAXSIZE];
S.top = S.base + MAXSIZE - 1;
}
*S.top++ = e;
return OK;
}
Status Pop(SqStack& S, SElemType& e) {
if (S.top == S.base)return ERROR;
e = *--S.top;
return OK;
}
SElemType GetTop(SqStack S) {
if (S.top = S.base)
return *(S.top - 1);
}
Status Empty_SqStack(SqStack S) {
if (S.top == S.base) return OK;
return ERROR;
}
void Conversion()
{
SqStack S;
InitStack(S);
int ten, N, elem;
char a = 'A';
cout << "输入你要转化的数(十进制)和你要转化成(N)进制的数:";
cin >> ten >> N;
elem = ten;
while (ten)
{
Push(S, ten % N);
ten = ten / N;
}
cout << "10进制数" << elem << "转化的" << N << "进制数如下:" << endl;
while (!Empty_SqStack(S))
{
Pop(S, elem);
if (elem > 9)
cout << a + elem - 10;
else
cout << elem;
}
cout << endl;
}
int main() {
while (1)
{
Conversion();
}
}
链式栈
#include<iostream>
#include<fstream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int SElemType;
typedef struct StackNode {
SElemType data;
struct StackNode* next;
} StackNode, * LinkStack;
Status InitStack(LinkStack& S) {
S = NULL;
return OK;
}
Status Push(LinkStack& S, SElemType e) {
LinkStack p;
p = new StackNode;
p->data = e;
p->next = S;
S = p;
return OK;
}
Status Pop(LinkStack& S, SElemType& e) {
LinkStack p;
if (S == NULL)
return ERROR;
e = S->data;
p = S;
S = S->next;
delete p;
return OK;
}
SElemType GetTop(LinkStack S) {
if (S != NULL)
return S->data;
}
int main() {
int N, e,n;
LinkStack S;
while (1)
{
cout << "请输入十进制N的数值:(输入0结束程序)" << endl;
cin >> N;
if (N == 0)break;
cout << "请输入你要转换的进制:" << endl;
cin >> n;
if (n == 1 || n == 0)break;
if (InitStack(S)) {
if (N == 0) {
cout << N;
return 1;
}
while (N) {
Push(S, N % n);
N = N / n;
}
while (Pop(S, e)) {
cout << e;
}
cout << endl;
}
}
}