[데이터 구조] 스 택 은 10 진법 에서 8 진법 으로 전환 합 니 다.
2595 단어 데이터 구조
코드 구현 은 다음 과 같 습 니 다.
#ifndef _SEQSTACK_H
#define _SEQSTACK_H
#include
#include
using namespace std;
typedef int ElemType;
#define STACK_INIT_SIZE 20
typedef struct Stack
{
ElemType *base;
int top;
int capacity;
}Stack;
void ConverSeq(int n);
bool IsFull(Stack *st);
bool IsEmpty(Stack *st);
void InitStack(Stack *st);
bool Push(Stack *st, ElemType x);
bool Pop(Stack *st, ElemType *v);
bool Pop(Stack *st);
#endif
bool IsFull(Stack *st)
{
return st->top >= st->capacity;
}
bool IsEmpty(Stack *st)
{
return st->top == 0;
}
void InitStack(Stack *st)
{
st->base = (ElemType *)malloc(sizeof(ElemType)*STACK_INIT_SIZE);
assert(st->base != NULL);
st->capacity = STACK_INIT_SIZE;
st->top = 0;
}
void ConverSeq(int n)
{
Stack s; //
int x = 0; //x
InitStack(&s);
while (n > 0) //
{
x = n % 8;
Push(&s, x);
n /= 8;
}
while (!IsEmpty(&s)) //
{
Pop(&s, &x);
cout << x;
}
}
bool Push(Stack *st, ElemType x)
{
if (IsFull(st))
{
cout << " ," << x << " !" << endl;
return false;
}
st->base[st->top++] = x;
return true;
}
bool Pop(Stack *st)
{
if (IsEmpty(st))
{
cout << " , !" << endl;
return false;
}
st->top--;
return true;
}
bool Pop(Stack *st, ElemType *v)
{
if (IsEmpty(st))
{
cout << " , !" << endl;
return false;
}
*v = st->base[--st->top];
return true;
}
2. 배열 실현
void Conversion(int N)
{
int stack[STACKSIZE], top;
top = 0;
do
{
stack[top] = N % 8;
top++;
N /= 8;
} while (N != 0);
cout< 0)
{
top--;
cout<
3. 링크 구현
#include
#include
#include
#include
typedef char ElemType;
typedef struct node
{
ElemType data;
struct node *next;
}LStackNode,*LinkStack;
void Conversion(int N);
void Conversion(int N)
{
LStackNode *p,*top = NULL;
do
{
p = (LinkStack)malloc(sizeof(LStackNode));
p->data = N%8;
p->next = top;
top = p;
N /= 8;
}while(N != 0);
cout<data;
top = top->next;
free(p);
}
cout<