此程序应用上个程序改造编写的。
#include <iostream>
using namespace std;
#include <stdlib.h>
#define ERROR 0
#define OK 1
typedef struct Nlink { //栈的链式结构
int data; //数据域
Nlink *top; //出栈
Nlink *base; //进栈
}Nlink,*linklist;
bool init_link(linklist &L) { //栈的初始化
L = (linklist)malloc(sizeof(Nlink));
if(!L) return ERROR;
L ->base = NULL; //栈顶和栈底指向NULL值
L ->top = L ->base;
return OK;
}
bool push_link(linklist &L,int elem) { //入栈函数
linklist T;
T = (linklist)malloc(sizeof(Nlink)); //运用逆向建表方式,进行压栈
if(!T) return ERROR;
T ->data = elem;
T ->top = L;
L = T;
return OK;
}
void pop_link(linklist L) { //出栈函数
while (L ->top != L->base) {
cout << L ->data;
L = L ->top;
}
}
bool base_output(linklist &L) {
int num,base;
cout << "input num and base :" <<endl;
cin >> num >> base;
do {
push_link(L,num % base);
num /= base;
}while(num !=0);
return OK;
}
bool main() {
linklist P;
init_link(P);
base_output(P);
pop_link(P);
free(P);
while(OK);
return OK;
}
结果图:
总结:刚刚开始写的时候,我在push函数写进制转换,感觉很奇怪;
然后参考一些程序,进制函数要独立写的,我想起一个函数的内聚度,
就是一个函数完成一个功能,这样函数利用率大,结构分明。
原来求进制这么简单。只需三行就可以。