数据结构——栈的动态实现(brk/sbrk)(Unix C语言实现)

来源:互联网 发布:王者荣耀网络检测出错 编辑:程序博客网 时间:2024/06/07 21:48
/*************************************************************************
    > File Name: stack_brk.c
    > Author: Andy001847
    > Mail: yunzhonglai@hotmail.com 
    > Created Time: 2014年10月22日 星期三 22时52分48秒
 ************************************************************************/


//栈的brk/sbrk实现,并且利用栈实现任意进制转换


#include <stdio.h>
#include <unistd.h>


void *begin = NULL;


//初始化栈
void init(){
begin = sbrk(0);
}


//清理栈
void deinit(){
brk(begin);
}


//判栈空
int empty(){
return begin == sbrk(0);
}


//入栈
void push(int data){
*(int *)sbrk(sizeof(int)) = data;
}


//出栈
void pop(){
sbrk(-sizeof(int));
}


//获取栈顶元素
int top(){
return *((int *)sbrk(0) - 1);
}


//获取栈中有效数据个数
int size(){
return (sbrk(0) - begin) / sizeof(int);
}


//进制转换函数
void converts(unsigned int number, int base){
init();    //初始化栈
do{
push(number % base);     //入栈
}while(number /= base);


while(!empty()){
if(top() < 10){
printf("%d",top());
}
else{
printf("%c",top() - 10 + 'A');
}
pop();  //出栈
}
printf("\n");
deinit();   //清理栈
}


int main(){
int num = 0;
printf("请输入一个整数:");
while(!scanf("%d",&num)){
scanf("%*[^\n]");
scanf("%*c");
printf("输入有误!请重新输入:");
}
scanf("%*[^\n]");
scanf("%*c");


int base = 0;
printf("请输入要转的进制:");
while(!scanf("%d",&base)){
scanf("%*[^\n]");
scanf("%*c");
printf("输入有误!请重新输入:");
}
scanf("%*[^\n]");
scanf("%*c");


printf("%d转换成%d进制为",num,base);
converts(num, base);


return 0;

}


运行结果演示:


0 0
原创粉丝点击