一、实验目的
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;
}