数据结构利用栈实现递归

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

利用栈实现递归参考程序1(Turbo2.0环境):

#define MAXSIZE 100

#include

struct stack{

int data[MAXSIZE];

int top;

};

void init(struct stack *s){

s->top=-1;

}

int empty(struct stack *s){

if(s->top==-1)

return 1;

else

return 0;

}

void push(struct stack *s,int i){

if(s->top==MAXSIZE-1){

printf("Stack is full\n");

return;

}

s->top++;

s->data[s->top]=i;

}

int pop(struct stack *s){

if(empty(s)){

printf("stack is empty");

return -1;

}

return(s->data[s->top--]);

}

void trans(int num){

struct stack s;

int k;

init(&s);

while(num){

k=num%16;

push(&s,k);

num=num/16;

}

while(!empty(&s)){

k=pop(&s);

if(k<10)

printf("%d",k);

else

printf("%c",k+55);

}

printf("\n");

}

main(){

int num;

clrscr();

printf("Input a num,-1 to quit:\n");

scanf("%d",&num);

while(num!=-1){

trans(num);

scanf("%d",&num);

}

}

参考程序2:(C++/VC环境)

#define STACK_INIT_SIZE 100//存储空间初始分配量

#define OVERFLOW -1

#define OK 1

#define STACKINCREMENT 10//存储空间分配增量

#define ERROR 0

#define TRUE 1

#define FALSE 0

#include "stdio.h"

#include "stdlib.h"

#include "malloc.h"

#include "iostream.h"

typedef int status;

typedef char SElemType;

typedef struct{//顺序栈的定义

SElemType *base;

SElemType *top;

int stacksize;

}SqStack;

status InitStack(SqStack &S){//构造一个空栈S

S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));

if(!S.base)exit(OVERFLOW);//存储分配失败

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

return OK;

}

status Push(SqStack &S,SElemType e){

//插入元素e为新世界的栈顶元素

if(S.top-S.base>=S.stacksize){//栈满,追加存储空间

S.base=(SElemType

*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));

if(!S.base)exit(OVERFLOW);//存储分配失败

S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;

}

*S.top++=e;

return OK;

}

status Pop(SqStack &S,SElemType &e){

//若栈不空,则删除S的栈顶元素,用e反回其值,并返回OK;否则返回ERROR if(S.top==S.base)return ERROR;

e=*--S.top;

return OK;

}

status StackEmpty(SqStack S){//判断栈S是否已满

if(S.top==S.base)

return TRUE;

else return FALSE;

}

void conversion(){

//对于输入的任意一个非负十进制整数,打印输出与其等值的对应的进制数

SqStack S;

int N,d;SElemType x,e; int ys;

InitStack(S);//构造空栈

cin>>N;//输入一个任意的非负十进制数

cin>>d;//输入要打印出的进制

while(N){//输出相应的符号

ys=N%d;//求余

if(ys<=9)

x=ys+'0';

else

x=ys-10+'A';

Push(S,x);

N=N/d;

}

while(!StackEmpty(S)){//显示结果

Pop(S,e);

cout<

}

}

相关文档
最新文档