顺序栈实现:
#include<iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE - 1
#define OVERFLOW - 2
#define MAXSIZE 100
#define SIZE 4
typedef int Status;
//顺序栈
typedef struct {
int* base;
int* top;
int stacksize;
}SqStack;
Status InitStack(SqStack& S) {
S.base = new int[MAXSIZE];
if (!S.base) exit(OVERFLOW);
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
//入栈
Status SqPush(SqStack& S, int e) {
if (S.top - S.base == S.stacksize) return ERROR;
*S.top++ = e;
return OK;
}
//出栈
Status SqPop(SqStack& S, int e) {
if (S.top == S.base) return ERROR;
e = *--S.top;
return OK;
}
int* GetTop(SqStack& S) {
if (S.top != S.base)
return (S.top - 1);
else return NULL;
}
//输入任意一个非负十进制数,输出结果为其等值的八进制
void conversion(SqStack& S, int N) {
InitStack(S);
while (N) {
SqPush(S, N % 8); //将N除以8的余数入栈
N = N / 8;
}
while (S.top != S.base) {
int e = *GetTop(S);
SqPop(S, e);
cout << e;
}
}
void main() {
SqStack S;
int n;
cout << "输入一个十进制数:" << endl;
cin >> n;
cout << "输出一个八进制数:" << endl;
conversion(S, n);
}
链栈
#include<iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE - 1
#define OVERFLOW - 2
#define MAXSIZE 100
#define SIZE 4
typedef int Status;
//链栈
typedef struct Snode {
int data;
struct Snode* next;
}Snode, * LinkStack;
Status InitStack(LinkStack& S) {
S = NULL;
return OK;
}
Status LinkPush(LinkStack& S, int e) {
LinkStack p = new Snode;
p->data = e;
p->next = S;
S = p;
return OK;
}
Status LinkPop(LinkStack& S, int e) {
if (!S) return ERROR;
e = S->data;
LinkStack p = S;
S = S->next;
delete p;
return OK;
}
LinkStack GetTop(LinkStack& S) {
if (!S) return NULL;
return S;
}
void conversion(LinkStack& S, int n) {
InitStack(S);
while (n) {
LinkPush(S, n % 8);
n = n / 8;
}
while (S) {
int e = GetTop(S)->data;
LinkPop(S, e);
cout << e;
}
}
void main() {
LinkStack S;
int n;
cout << "输入一个十进制数:" << endl;
cin >> n;
cout << "输出一个八进制数:" << endl;
conversion(S, n);
}