您的位置:首页 > 其它

第三章 栈和队列实验

2014-11-25 23:54 344 查看
一、链栈头文件
#ifndef Linkstack_H
#define Linkstack_H
template <class Datatpye>
struct Node
{
Datatpye data;
Node<Datatpye>*next;

};
template <class Datatpye>
class Linkstack
{
public:
Linkstack();
void empty(){if(top==NULL)cout<<"此链表为空"<<endl;}
void Push(Datatpye a[],int n);
Datatpye Gettop();
void  Pop();

private:
Node<Datatpye>*top;
};
#endif
函数定义
#include"Linkstack.h"
template <class Datatpye>
Linkstack<Datatpye>::Linkstack()                          //初始化一个空链栈
{top=NULL;}
template <class Datatpye>
void Linkstack<Datatpye>::Push(Datatpye a[],int n)       //入栈操纵
{
for(int i=0;i<n;i++)
{
Node<Datatpye>*s;
s=new Node<Datatpye>;
s->data=a[i];
s->next=top;
top=s;
}
}
template <class Datatpye>
void  Linkstack<Datatpye>::Pop()                       //出栈操作
{   Node<Datatpye>*p;
if(top==NULL)throw "下溢";
p=top;
top=top->next;
delete p;

}
template <class Datatpye>
Datatpye Linkstack<Datatpye>::Gettop()                     //取栈顶元素
{
if(top!=NULL)return top->data;
else return NULL;
}
实现
#include<iostream>
using namespace std;
#include"Linkstack.cpp"
void main()
{
Linkstack<int>L;
L. empty();
int a[]={1,2,3,4,5};
L.Push(a,5);
cout<<"请输出插入数据后栈顶元素"<<endl;
cout<<L.Gettop()<<endl;
L.Pop();
cout<<"请输出出栈后的栈顶元素"<<endl;
cout<<L.Gettop()<<endl;

}
二、循环队列头文件
#ifndef Cirqueue_H#define Cirqueue_Hconst int Queuesize=10;template <class Datatpye>class Cirqueue{public:Cirqueue();void Enqueue(Datatpye x);Datatpye Dequeue();Datatpye Getqueue();int empty(){front==rear?return 1;return 0;}private:Datatpye data[Queuesize];int front,rear;};#endif
函数定义
#include"Cirqueue.h"template <class Datatpye>Cirqueue<Datatpye>::Cirqueue()                          //初始化一个空队列{front=rear=Queuesize-1;}template <class Datatpye>void Cirqueue<Datatpye>::Enqueue(Datatpye x)            //入队操作{if ((rear+1)%Queuesize==front) throw"上溢";rear=(rear+1)%Queuesize;data[rear]=x;}template <class Datatpye>Datatpye Cirqueue<Datatpye>::Dequeue()                //出队操作{if(rear==front)throw "下溢";front=(front+1)%Queuesize;return 0;}template <class Datatpye>Datatpye Cirqueue<Datatpye>::Getqueue()               //取队头元素{if (rear==front)throw "下溢";int i;i=(front+1)%Queuesize;return data[i];}
函数实现
#include<iostream>using namespace std;#include"Cirqueue.cpp"int main(){Cirqueue<int>C;cout<<"请输入要入队的元素个数"<<endl;int n;cin>>n;for(int i=1;i<=n;i++){   int n;cout<<"请输入要输入的元素"<<endl;cin>>n;C.Enqueue(n);}cout<<"栈顶元素为"<<C.Getqueue()<<endl;cout<<"请输入要出队的元素个数"<<endl;int m;cin>>m;for( i=1;i<=m;i++)C.Dequeue();cout<<"栈顶元素为"<<C.Getqueue()<<endl;return 0;}
总结:栈:是限定仅在表尾进行插入和删除操作的线性表,栈的元素先进后出队列:是只允许在一段进行插入操作,在另一端进行删除操作的线性表。队列元素先进先出。栈和队列都是受限的线性表,是特殊的线性表。两者都可以用顺序和链表来存储,操作算法主要是构造、入栈(入队)、出栈(出队)、读取栈顶(队头)元素等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: