《数据结构》实验三: 栈和队列实验

来源:互联网 发布:php autoload用法 编辑:程序博客网 时间:2024/05/17 03:06

《数据结构》实验三:    栈和队列实验

一.实验目的

     巩固栈和队列数据结构,学会运用栈和队列。

1.回顾栈和队列的逻辑结构和受限操作特点,栈和队列的物理存储结构和常见操作。

2.学习运用栈和队列的知识来解决实际问题。

3.进一步巩固程序调试方法。

4.进一步巩固模板程序设计。


二.实验内容

1.自己选择顺序或链式存储结构,定义一个空栈类,并定义入栈、出栈、取栈元素基本操作。然后在主程序中对给定的N个数据进行验证,输出各个操作结果。

2.自己选择顺序或链式存储结构,定义一个空栈队列,并定义入栈、出栈、取栈元素基本操作。然后在主程序中对给定的N个数据进行验证,输出各个操作结果。

3.编程实现一个十进制数转换成二进制数。要求,要主程序中输出一个10进度数,输出其对应的2进制数序列。

    前两题是必做题,第3题是选做题。


三.实验结果

实验一

#ifndef SeqStack_H   #define SeqStack_H   const int StackSize=2;  template<class D>  class SeqStack  {  public:  SeqStack();  ~SeqStack(){}  void Push(D x);  D Pop();  D GetTop();  int Empty();  private:  D data[StackSize];  int top;  };  #endif       template<class D>  SeqStack<D>::SeqStack()  {  top=-1;  }  template<class D>  void SeqStack<D>::Push (D x)  {  if(top==StackSize-1)throw"上溢";  top++;  data[top]=x;  }  template<class D >  D SeqStack<D>::Pop()  {  D x;  if(top==-1)throw"下溢";  x=data[top--];  return x;  }  template<class D>  D SeqStack<D>::GetTop ()  {  if(top!=-1)  return data[top];  }  template<class D>  int SeqStack<D>::Empty ()  {  if(top==-1)return 1;  else return 0;  }  #include<iostream>   using namespace std;  void main()  {  SeqStack<int>S;  if(S.Empty())  cout<<"栈为空"<<endl;  else  cout<<"栈非空"<<endl;  cout<<"对15和10执行入栈操作"<<endl;  S.Push(15);  S.Push(10);  cout<<"栈顶元素为:"<<endl;  cout<<S.GetTop()<<endl;  cout<<"执行一次出栈操作"<<endl;  S.Pop();  cout<<"栈顶元素为:"<<endl;  cout<<S.GetTop()<<endl;  cout<<"请继续输入数据:"<<endl;  int w;  cin>>w;  S.Push(w);  cout<<"栈顶为:"<<endl;  cout<<S.GetTop()<<endl;  }  


实验二

#include<iostream>  using namespace std;    template<class A>  struct Node  {      A data;      Node<A> *next;  };    template<class A>  class LinkQueue  {      public:          LinkQueue();          ~LinkQueue();          void enqueue(A x);          A dequeue();          A getqueue();          int empty();  private:          Node<A> *front, *rear;  };    template<class A>  LinkQueue<A>::LinkQueue()  {      Node<A> *s=NULL;      s=new Node<A>;      s->next=NULL;      front=rear=s;  }    template<class A>  LinkQueue<A>::~LinkQueue()  {      Node<A>*p=NULL;      while(front!=NULL)      {          p=front->next;          delete front;          front=p;      }  }    template<class A>  void LinkQueue<A>::enqueue(A x)  {      Node<A> * s=NULL;      s=new Node<A>;      s->data=x;      s->next=NULL;      rear->next=s;      rear=s;  }    template<class A>  A LinkQueue<A>::dequeue()  {      Node<A> *p=NULL;      int x;      if(rear==front) throw"下溢";      p=front->next;      x=p->data;      front->next=p->next;      if(p->next==NULL) rear=front;      delete p;      return x;  }    template<class A>  A LinkQueue<A>::getqueue()  {      if(front!=rear)          return front->next->data;  }    template<class A>  int LinkQueue<A>::empty()  {      if(front==rear)          return 1;      else          return 0;  }    void main()  {      LinkQueue<int>H;      if(H.empty())          cout<<"队列为空"<<endl;      else          cout<<"队列非空"<<endl;      cout<<"元素1和4和6执行入队操作:"<<endl;      try      {          H.enqueue(1);          H.enqueue(4);          H.enqueue(6);      }      catch(char * wrong)      {          cout<<wrong<<endl;      }      cout<<"查看队头元素:"<<endl;      cout<<H.getqueue()<<endl;      cout<<"执行一次出队操作:"<<endl;      try      {          H.dequeue();      }      catch(char * wrong)      {          cout<<wrong<<endl;      }      cout<<"查看队头元素:"<<endl;      cout<<H.getqueue()<<endl;  }  


 

0 0
原创粉丝点击