实验三 栈和队列及其应用

一、实验目的

1.掌握栈的抽象数据类型描述及特点。

2.掌握栈的顺序和链式存储结构与基本算法实现。

3.掌握栈在实际问题中的应用和基本编程技巧。

二、实验内容

1. 栈在不同存储结构上进行插入、删除等操作的算法。

2. 通过栈解决现实中的一些问题。

三、实验过程

1、实验题目

[问题描述]

以下题目根据自己兴趣和能力分别选取栈和队列中的一道作为实验题目:

根据栈的数据结构,建立一个栈,利用栈实现如下其中一个应用:

(1)实现数据不同进制之间的转换;

(2)判断表达式括号是否匹配;

(3)求整数N的阶乘。递归问题转换为非递归实现;

(4)根据教材介绍表达式求值的思想,设计并实现一个对简化表达式求值的系统。

 [基本要求]

(1)按实验内容编写完整的程序,并上机验证。

(2)实验完成后,提交电子档教师验收程序,并提交填写好的实验报告。

[测试数据]

由学生依据软件工程的测试技术自己确定。注意测试边界数据。

栈的数制转换

#include <iostream>

using namespace std;

#define MaxSize 100

/*定义顺序栈的结点类型*/

struct Stack

{

    int data[MaxSize];

    int top;

};





void InitStack(Stack *s)

{

    s->top=-1;

}



//入栈

void Push(Stack *s,int x)

{

    if(s->top==MaxSize-1)

        cout<<"栈已满"<<endl;

    else{

        s->data[++s->top]=x;

    }

}



//出栈

int Pop(Stack *s)

{

    int x;

    if(s->top==-1){

        cout<<"栈已空"<<endl;

        return 0;

    }

    else{

        x=s->data[s->top];

        s->top--;

        return(x);

    }

}



/*数制转换*/

void Conversion(int n,int base)

{

    Stack *s,Stack1;

    s=&Stack1;

    InitStack(s);

    int x;

    while(n!=0){ //进行求模运算,直到n为0时退出循环

        x=n%base;

        Push(s,x);

        n=n/base;

    }

    while(s->top!=-1)  //依次弹出栈顶的元素,最终形成的数即为所求进制数

        cout<<Pop(s);

}



int main()

{

    Stack *InitStack();

    void Push(Stack *s,int x);

    int Pop(Stack *s);

    void Conversion(int n,int base);



    int n,base;

    cout<<"请输入需要转换的十进制数:";

    cin>>n;

    cout<<"请输入新数制的基数:";

    cin>>base;

    Conversion(n,base);

    return 0;

}

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值