数据结构利用栈实现递归
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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< } }