Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1014548
  • 博文数量: 327
  • 博客积分: 9995
  • 博客等级: 中将
  • 技术积分: 4319
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-25 11:21
文章存档

2011年(31)

2010年(139)

2009年(157)

我的朋友

分类: C/C++

2009-06-07 00:00:40

一、 实验目的
掌握栈的基本操作:初始化栈、判栈为空、出栈、入栈等运算。
二、实验要求
1.认真阅读和掌握本实验的算法。
2.上机将本算法实现。
3.保存和打印出程序的运行结果,并结合程序进行分析。
三、实验内容
利用栈的基本操作实现将任意一个十进制整数转化为R进制整数
算法为:
1、定义栈的顺序存取结构
2、分别定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等)
3、定义一个函数用来实现上面问题:
十进制整数X和R作为形参
初始化栈
只要X不为0重复做下列动作
将X%R入栈
    X=X/R
只要栈不为空重复做下列动作
  栈顶出栈
  输出栈顶元素
 
参考程序:
 

#define MAXSIZE 100
#include<stdlib.h>
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);
    }

}
    
    

阅读(1452) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~