[데이터 구조] 스 택 은 10 진법 에서 8 진법 으로 전환 합 니 다.

2595 단어 데이터 구조
1. 창고 이용 의 기본 조작
코드 구현 은 다음 과 같 습 니 다.
#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<

좋은 웹페이지 즐겨찾기