【数据结构】 栈实现 十进制到八进制的转化



1.利用栈的基本操作

代码实现如下



#ifndef _SEQSTACK_H
#define _SEQSTACK_H


#include<iostream>
#include<assert.h>
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<<"转换后的八进制为:";
	while (top > 0)
	{
		top--;
		cout<<stack[top];
	}
	cout<<endl;
}


3.链表实现

#include <stdio.h>  
#include <stdlib.h>  
#include <malloc.h>  
#include <string.h>  
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<<"数制转换成八进制数:";  
    while(top != NULL)  
    {  
        p = top;  
        cout<<p->data;  
        top = top->next;  
        free(p);  
    }  
    cout<<endl;  
}

相关文章

【啊哈!算法】算法3:最常用的排序——快速排序       ...
匿名组 这里可能用到几个不同的分组构造。通过括号内围绕的正...
选择排序:从数组的起始位置处开始,把第一个元素与数组中其...
public struct Pqitem { public int priority; ...
在编写正则表达式的时候,经常会向要向正则表达式添加数量型...
来自:http://blog.csdn.net/morewindows/article/details/6...