数据结构-栈十进制转八进制的算法详解(已测试过)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构-栈十进制转八进制的算法详解(已测试过)

实验目的

建立栈实现十进制转八进制

实验内容

编程序并上机调试运行。

建立栈实现十进制转八进制

1.编写程序

//十进制转八进制

#include

#include

#include

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

typedef struct {

int *base;

int *top;

int stacksize;

}sqstack;

int initstack (sqstack *s)

{s->base=(int *)malloc(STACK_INIT_SIZE * sizeof(int));

if(!s->base)

exit(0);

s->top=s->base;

s->stacksize =STACK_INIT_SIZE ;

return 0;

}//构造一个空栈s

int push(sqstack *s,int e)

{ if((s->top-s->base)>=s->stacksize){

s->base=(int*)realloc(s->base,(s->stacksize +

STACKINCREMENT )*sizeof(int));

if(!(s->base)) exit(1);

s->top=s->base+s->stacksize;

s->stacksize+=STACKINCREMENT;

}

*s->top++=e;

return 0;

}//插入新的元素e为新的栈顶元素

int stackempty (sqstack *s)

{if(s->top==s->base)

return 1;

else return 0;

}//若栈s为空栈,则返回1,否则返回0

int pop (sqstack *s,int *e)

{if(s->top==s->base)

return 1;

*e=*--s->top;

return 0;

}//若栈不为空,则删除s的栈顶元素,用e返回其值,返回OK,否则返回ERROR

void conversion (int n)

{ sqstack s;

int e;

initstack(&s);

printf("请输入一个十进制数:\n");

scanf("%d",&n);

while (n){

push(&s,n%8);

n=n/8;

}

printf("\n");

printf("该数的八进制数为:\n");

while(!stackempty(&s)){

pop(&s,&e);

printf("%d",e);

}

printf("\n");

}//对于输入的任意一个非负十进制整数,打印出与其等值的八进制数int main()

{

int n;

//sqstack *s;

// initstack(s);

conversion (n);

return 0;

}//主函数

运行程序:

程序解析:

1.首先是将程序的开头写好,要有#include,然后定义STACK_INIT_SIZE 为100 ,STACKINCREMENT为10。

定义栈顶和栈底都为int型,并且stacksize为int型。

2.构建一个空栈。

建立一个空栈,但建立不成功是就强制退出,建立成功时就使栈顶和栈顶指向同一个点,并且分配预定长度的节给stacksize。

3.插入新的元素e为新的栈顶元素

插入一个新的元素到栈里,如果长度超过栈的长度,则重新分配新的空间给sqstack。如果栈底部存在则发生错误,意外退出。然后让e插入成为新的栈顶元素。

4.判断栈是否为空栈。

该函数用stackempty表示,如果栈顶等于栈底,则栈为空栈,返回1,否则返回0.

5.取出栈顶元素

若栈为空,则返回1,若栈不为空,则让e指向s的栈顶元素,删除s的栈顶元素,用e返回其值。

6.建立conversion函数

定义一个空栈s,然后scanf输入一个数,当该数不为0时,就执行push

函数和n=n/8,如果n=0则跳出循环。然后当栈不为空时,将栈顶一个一个取出,得到的为原十进制数的八进制数。

7.建立main函数。

这里的main函数只要三句话就够了。定义n,和调用conversion函数,return 0.

相关文档
最新文档