數據結構實驗二:利用棧把十進制數轉換為八進制數


#include<stdio.h>
#include<stdlib.h>
#define ok 1
#define error 0
#define overflow -2
typedef struct
{
    int *base,*top;
    int stacksize;
}sqstack;

int initstack(sqstack *s)
{
    s->base=(int *)malloc(10*sizeof(int));                        //預先為s->base所指向的內存空間分配10個int類型的存儲空間
    if(!s->base)return overflow;
    s->top=s->base;
    s->stacksize=10;
    return ok;
}

int gettop(sqstack *s,int *e)
{
    if(s->top==s->base)return error;
    *e=*(s->top-1);
    return ok;
}

int pop(sqstack *s,int *e)
{
    if(s->top==s->base)return error;
    s->top--;
    *e=*s->top;
    return ok;
}

int push(sqstack *s,int e)
{
    if(s->top-s->base>=s->stacksize)
    {
        s->base=(int *)realloc(s->base,(s->stacksize+10)*sizeof(int));    //如果棧滿,則再次給s->base所指向的內存空間分配10個int類型的存儲空間
        if(!s->base)return overflow;
        s->top=s->base+s->stacksize;
        s->stacksize++;
    }
    *s->top=e;
    s->top++;
    return ok;
}

int getlength(sqstack *s)                 //獲取棧的長度作為返回值
{
    int i;
    i=s->top-s->base;
    return i;
}

int convertion(int n)                             //傳入一個十進制數n,返回值為n的八進制
{
    int k,t,l,m,sum;
    sqstack s;
    initstack(&s);
    do
    {
        k=n%8;
        push(&s,k);
        n/=8;
    }while(n!=0);
    l=getlength(&s);
    for(sum=0;l>0;l--)
    {
        sum*=10;                   //sum*10表示每進行一次循環小數點都向后移動一位,即先出棧的元素位權高
        pop(&s,&m);
        sum+=m;
    }
    return sum;
}

void main()
{
    int i,j;
    printf("請輸入一個十進制數:");
    scanf("%d",&j);
    i=convertion(j);
    printf("十進制數%d的八進制為:%d\n",j,i);
}

程序運行結果如下:

可以發現,無論是正數還是負數程序都能進行轉化。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM