栈 实验报告

实验内容

利用栈的功能将十进制整数转换成二至九之间的任一进制数输出。

基本原理

将十进制整数N转换为r进制数的过程中,由低到高依次得到r进制数中的每一位数字,而输出时又需要由高到低依次输出每一位,恰好与计算过程相反,输出的过程符合“后进先出”的栈的特性。因此,可在转换过程中每得到一位r进制数就进栈保存,转换完毕后依次出栈正好是转换结果。算法思路如下:

    • 若N≠0,则将N%r压入栈s中。
    • 用N/r代替N。
    • 若N>0,则重复步骤①、②;若N=0,则将栈a的内容依次出栈。
  • 实验步骤和结果
  1. 步骤
    1. 若N≠0,则将N%r压入栈s中。
    2. 用N/r代替N。
    3. 若N>0,则重复步骤①、②;若N=0,则将栈a的内容依次出栈。
  2. 结果

  • 实验中出现的问题及解决方法
  • 问题:return FALSE错误

解决方法:改为

  • 实验总结及体会

由于进制转换符合先进后出的特点,所以用栈来实现这一程序设计显得尤为合适。当然,所有符合“先进后出”特点的流程都可以用栈来实现。由于第一次接触栈这个新的概念,需要多加练习巩固这个知识点的代码流程。

  • 附录

#include<stdio.h>
#include<malloc.h>
#define maxsize 100
typedef int datatype;
typedef struct
{
    int stack[maxsize];
    int top;
}
seqstack;
seqstack *initstack()
{

    seqstack *s;
    s=(seqstack *)malloc(sizeof(seqstack));
    if(!s)
    {
        printf("空间不足");
        return NULL;
    }
    else
    {s->top=0;
    return s;
    }
}

seqstack *push(seqstack *s,int x)
{

    if(s->top==maxsize)
    {
        printf("the stack is overflow!\n");
        return NULL;
    }
    else{
        s->stack[s->top]=x;
        s->top++;
        return s;
    }
}

int stackempty(seqstack *s)
{

    if(s->top==0)
        return 1;
    else
        return 0;
}

int pop(seqstack *s)
{

    int y;
    if(s->top==0)
    {
        printf("the stack is empty!\n");
        return 0;
    }
    else 
    
{
        s->top--;
        y=s->stack[s->top];
        return y;
    }
}

void conversion(int N,int r)
{

    int x=N,y=r;
    seqstack *s;
    s=initstack();
    while(N!=0){
        push(s,N%r);
        N=N/r;
    }
    printf("\n十进制数%d所对应的%d进制数是:",x,y);
    while(!stackempty(s))
        printf("%d",pop(s));
    printf("\n");
}

int main()
{

    int n,r;
    printf("请输入任意一个十进制整数及其所需转换的二至九间的任一进制数:\n");
    scanf("%d %d",&n,&r);
    conversion(n,r);
}

好的,以下是一个C语言实验报告的模板,供您参考: # 实验名称:C语言的实现 ## 实验目的: 1. 理解的基本概念和特点。 2. 掌握的基本操作:push和pop。 3. 熟悉的应用场景。 ## 实验环境: - 操作系统:Windows 10 - 编程语言:C语言 - 开发工具:Visual Studio Code ## 实验内容: ### 1. 的定义 是一种后进先出(Last In First Out,LIFO)的数据结构,它只允许在表的一端进行插入和删除运算。根据的定义,可以使用数组来实现。 ### 2. 的基本操作 的基本操作包括push和pop。push操作将元素插入顶,pop操作将顶元素删除。 以下是的基本操作的伪代码: ``` push(S, x): if stack is full: error "stack overflow" else: top ← top + 1 stack[top] ← x pop(S): if stack is empty: error "stack underflow" else: top ← top - 1 return stack[top + 1] ``` ### 3. 的应用场景 广泛应用于编程语言的解析、函数调用、表达式求值等场景中。例如,在编程语言的解析过程中,可以使用来判断括号是否匹配。 ## 实验结果: 在实验过程中,我们成功实现了一个基于数组的,并完成了push和pop操作。通过实验,我们深入理解了的基本概念和特点,并掌握了的基本操作。同时,我们也熟悉了的应用场景,为以后的编程工作打下了基础。 ## 总结: 本次实验让我们掌握了的基本操作和应用场景,这对我们以后的编程工作非常有帮助。通过实验,我们也发现了的局限性,例如的存储空间有限,只能在顶进行插入和删除操作等。因此,在实际应用中,我们还需要结合具体场景选择合适的数据结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值