首页 > 代码库 > 数据结构实验三《栈和队列》
数据结构实验三《栈和队列》
《数据结构》实验三
栈和队列一、实验目的
巩固栈和队列数据结构,学会运用栈和队列。
1.回顾栈和队列的逻辑结构和受限操作特点,栈和队列的物理存储结构和常见操作。
2.学习运用栈和队列的知识来解决实际问题。
3.进一步巩固程序调试方法。
4.进一步巩固模板程序设计。
二、实验时间
准备时间为第5周到第6周,具体集中实验时间为6周第2次课。2个学时。
三、实验内容
1.自己选择顺序或链式存储结构,定义一个空栈类,并定义入栈、出栈、取栈元素基本操作。然后在主程序中对给定的N个数据进行验证,输出各个操作结果。
2.自己选择顺序或链式存储结构,定义一个空栈队列,并定义入栈、出栈、取栈元素基本操作。然后在主程序中对给定的N个数据进行验证,输出各个操作结果。3.编程实现一个十进制数转换成二进制数。要求,要主程序中输出一个10进度数,输出其对应的2进制数序列。
一、链栈的实现
源代码:
#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=http://www.mamicode.com/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;
}
三、十进制数转为二进制数
源代码:
#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);
void 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>
void linkstack<datatype>::pop()
{
if(top==NULL)throw"xiayi";
Node<datatype> * p=top;
top=top->next;
delete p;
}
template <class datatype>
void linkstack<datatype>::push(datatype x)
{
Node<datatype> * s=new Node<datatype>;
s->data=http://www.mamicode.com/x;
s->next=top;
top=s;
}
void main()
{
linkstack<int> t;
cout<<endl<<"请输入一个十进制数:"<<endl;
int x,y, count=0;
cin>>x;
while(x!=0)
{
y=x%2;
t.push(y);
x=x/2;
++count;
}
if(t.Empty()==1)cout<<endl<<"输入数据有错!"<<endl;
else cout<<endl<<"相对应的二进制数为:";
for(int i=0;i<count;i++)
{
cout<<t.gettop();
t.pop();
}
cout<<endl<<endl;
}
数据结构实验三《栈和队列》