《数据结构》实验三: 栈和队列实验
一..实验目的
巩固栈和队列数据结构,学会运用栈和队列。
1.回顾栈和队列的逻辑结构和受限操作特点,栈和队列的物理存储结构和常见操作。
2.学习运用栈和队列的知识来解决实际问题。
3.进一步巩固程序调试方法。
4.进一步巩固模板程序设计。
二.实验时间
准备时间为第5周到第6周,具体集中实验时间为6周第2次课。2个学时。
三..实验内容
1.自己选择顺序或链式存储结构,定义一个空栈类,并定义入栈、出栈、取栈元素基本操作。然后在主程序中对给定的N个数据进行验证,输出各个操作结果。
2.自己选择顺序或链式存储结构,定义一个空栈队列,并定义入栈、出栈、取栈元素基本操作。然后在主程序中对给定的N个数据进行验证,输出各个操作结果。3.编程实现一个十进制数转换成二进制数。要求,要主程序中输出一个10进度数,输出其对应的2进制数序列。
前两题是必做题,第3题是选做题。
一、链栈的实现
源代码:
#include<iostream>
using namespace std;
template <class datatype>
struct Node
{
datatype data;
Node<datatype> *next;
};
template <class datatype>
class linkstack
{
public:
linkstack(){top=NULL;}
~linkstack(){while(top!=NULL){Node<datatype> *q=top;top=top->next;delete q;}};
void push(datatype x);
datatype pop();
datatype gettop(){if(top!=NULL)return top->data;}
int Empty(){if(top==NULL)return 1;else return 0;}
private:
Node<datatype>* top;
};
template <class datatype>
datatype linkstack<datatype>::pop()
{
if(top==NULL)throw"xiayi";
datatype x=top->data;
Node<datatype> * p=top;
top=top->next;
delete p;
return x;
}
template <class datatype>
void linkstack<datatype>::push(datatype x)
{
Node<datatype> * s=new Node<datatype>;
s->data=x;
s->next=top;
top=s;
}
void main()
{
linkstack<int> t;
if(t.Empty()==1)cout<<endl<<"栈为空"<<endl;
else cout<<endl<<"栈非空"<<endl;
int r[5];
cout<<endl<<"请对栈赋5个值:"<<endl;
for(int i =0;i<5;i++)
{
cin>>r[i];
}
cout<<endl;
if(t.Empty()==1)cout<<endl<<"栈为空"<<endl;
else cout<<endl<<"栈非空"<<endl;
for(int n =0;n<5;n++)t.push(r[n]);
cout<<endl<<"栈顶元素为:"<<t.gettop()<<endl;
cout<<endl<<"执行一次初栈操作:"<<endl;
t.pop();
cout<<endl<<"栈顶元素为:"<<t.gettop()<<endl;
cout<<endl<<"执行一次初栈操作:"<<endl;
t.pop();
cout<<endl<<"栈顶元素为:"<<t.gettop()<<endl;
}
调试结果:
二、顺序队列的实现
源代码:
#include<iostream>
using namespace std;
const int StackSize=10;
class SeqStack
{
public:
SeqStack(){top=-1;};
~SeqStack(){};
void push(int x);
int pop();
int GetTop(){if(top!=-1)return data[top];}
int Empty(){if(top==-1)return 1;else return 0;}
private:
int data[StackSize];
int top;
};
void SeqStack::push(int x)
{
if(top==StackSize-1)throw"shangyi";
data[++top]=x;
}
int SeqStack::pop()
{
if(top==-1)throw"xiayi";
int x=data[top--];
return x;
}
void main()
{
SeqStack S;
if(S.Empty())cout<<endl<<"栈为空"<<endl;
else cout<<endl<<"栈非空"<<endl;
cout<<"对15和10执行入栈操作"<<endl;
S.push(15);
S.push(10);
cout<<endl<<"栈顶元素为:"<<endl;
cout<<S.GetTop()<<endl;
cout<<endl<<"执行一次出栈操作:"<<endl;
S.pop();
cout<<endl<<"栈顶元素为:"<<endl;
cout<<S.GetTop()<<endl;
}
调试结果:
三、实验报告