实验三 栈的应用
一、实验目的
1.掌握栈的抽象数据类型。
2.掌握实现栈的各种操作的算法。
3.理解栈与递归的关系。
二、实验环境
⒈ 硬件:每个学生需配备计算机一台。操作系统: Windows;
⒉ 软件:DOS或Windows操作系统+Myeplps;
三、实验要求及实验内容
⒈描述栈的每种操作在顺序栈或链栈上的实现。
2.将建栈、初始化栈、判断栈是否非空、入栈、输出从栈顶到栈底的元素分别定义为5个成员函数,通过主函数实现对上述函数的测试正确性。
3.栈中每个元素为整型,输入数据为一个十进制数,输出其转换后的二进制数。(由高位到低)
实现程序:
1.顺序栈代码实现SqStackClass.java
public class SqStackClass<E> {
final int initcapacity=10;//顺序栈泛型类
private int capacity;//顺序栈的初始容量
private E[] data;//存放顺序栈中元素
private int top;//存放栈顶指针
public SqStackClass(){//构造方法实现data
data =(E[]) new Object[initcapacity];
capacity=initcapacity;
top=-1;
}
private void updatecapacity(int newcapacity){
E[] newdata = (E[]) new Object[newcapacity];
for(int i=0;i<=top;i++)
newdata[i]=data[i];
capacity=newcapacity;
data=newdata;
}
//判断栈是否为空
public boolean empty(){
return top==-1;
}
//元素e进栈
public void push(E e){
//顺序栈空间满时倍增容量
if(top==capacity-1)
updatecapacity(2*(top+1));
top++;
data[top]=e;
}
//出栈操作
public E pop(){
if(empty())
throw new IllegalArgumentException("栈空");
E e=(E)data[top];
top--;
if(capacity>initcapacity&&top+1==capacity/4)
updatecapacity(capacity/2);
return e;
}
public E peek(){
if(empty())
throw new IllegalArgumentException("栈空");
return (E)data[top];
}
//转换
public void conversion(int n){
SqStackClass<Integer> s=new SqStackClass<Integer>();
while (n!=0){
s.push(n%2);
n=n/2;
}
while (!s.empty()){
int e=s.pop();
System.out.println(e);
}
}
}
2.测试代码test.java
public class test {
public static void main(String[] args) {
SqStackClass<Integer> sa = new SqStackClass<>();
System.out.println("请放进一个十进制数");
Scanner scr=new Scanner(System.in);
int i=scr.nextInt();
System.out.println("二进制数是:");
sa.conversion(i);
}
}
运行结果
测试
通过!
四、报告要求
1.报告要求用专门的实验报告纸书写,字迹清晰,格式规范。
2.报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验要求。
3.报告中应书写源程序,且源程序中要有注释。
4.报告中应包含运行结果及结果分析。如调试通过,请注明‘通过’并写出输入的数据及运行结果;如未调试通过或结果不正确,试分析原因。
5.报告最后包含实验总结和体会。