数据库实验三

来源:互联网 发布:手机炒贵金属软件 编辑:程序博客网 时间:2024/05/29 14:33


一..实验目的

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

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

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

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

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

二.实验时间

   准备时间为第5周到第6周,具体集中实验时间为6周第2次课。2个学时。

三..实验内容

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

[cpp] view plaincopy
  1. //头文件  
  2. #ifndef S_H  
  3. #define S_H  
  4. const int Ssize=10;  
  5. template<class datatype>  
  6. class S  
  7. {  
  8.     public:  
  9.         S();  
  10.         ~S(){}  
  11.         void push(datatype x);  
  12.         datatype pop();  
  13.         datatype gettop();  
  14.         int empty();  
  15.     private:  
  16.         datatype data[Ssize];  
  17.         int top;  
  18. };  
  19. #endif  
  20.   
  21.   
  22. //源文件  
  23. #include "zdl_header.h"  
  24. template<class datatype>  
  25. S<datatype>::S()  
  26. {  
  27.     top=-1;  
  28. }  
  29. template<class datatype>  
  30. void S<datatype>::push(datatype x)  
  31. {  
  32.     if(top==Ssize-1)throw "上溢";  
  33.     top++;  
  34.     data[top]=x;  
  35. }  
  36. template<class datatype>  
  37. datatype S<datatype>::pop()  
  38. {  
  39.     datatype x;  
  40.     if(top==-1)throw "下溢";  
  41.     x=data[top--];  
  42.     return x;  
  43. }  
  44. template<class datatype>  
  45. datatype S<datatype>::gettop()  
  46. {  
  47.     if(top!=-1)  
  48.         return data[top];  
  49. }  
  50. template <class datatype>  
  51. int S<datatype>::empty()  
  52. {  
  53.     if(top==-1)return 1;  
  54.     else return 0;  
  55. }  
  56.   
  57.   
  58.   
  59. //主函数  
  60. #include<iostream>  
  61. using namespace std;  
  62. #include "zdl_sf.cpp"  
  63.   
  64. void main()  
  65. {  
  66.     S<int>s;  
  67.     if(s.empty())  
  68.         cout<<"栈为空"<<endl;  
  69.     else   
  70.         cout<<"栈非空"<<endl;  
  71.     cout<<"对以下10个数执行入栈操作"<<endl;  
  72.     s.push(15);  
  73.     s.push(45);  
  74.     s.push(75);  
  75.     s.push(10);  
  76.     s.push(195);      
  77.     s.push(35);  
  78.     s.push(18);  
  79.     s.push(19);   
  80.     s.push(36);  
  81.     s.push(15);  
  82.     cout<<"栈顶元素为:"<<endl;  
  83.     cout<<s.gettop()<<endl;  
  84.     cout<<"执行一次出栈操作"<<endl;  
  85.     s.pop();  
  86.     cout<<"栈顶元素为:"<<endl;  
  87.         cout<<s.gettop()<<endl;  
  88.     cout<<"执行一次出栈操作"<<endl;  
  89.     s.pop();  
  90.     cout<<"栈顶元素为:"<<endl;  
  91.         cout<<s.gettop()<<endl;  
  92.     cout<<"执行一次出栈操作"<<endl;  
  93.     s.pop();  
  94.     cout<<"栈顶元素为:"<<endl;  
  95.     cout<<s.gettop()<<endl;  
  96. }  

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

[cpp] view plaincopy
  1. //头文件  
  2. #ifndef L_H  
  3. #define L_H  
  4. template <class datatype>  
  5. struct node   
  6. {  
  7.     datatype data;  
  8.     node<datatype> *next;  
  9. };  
  10. template<class datatype>  
  11. class L  
  12. {  
  13.     public:  
  14.         L();  
  15.         ~L();  
  16.         void EQ(datatype x);  
  17.         datatype DQ();  
  18.         datatype GQ();  
  19.         int empty();  
  20.     private:  
  21.         node<datatype> *front,*rear;  
  22. };  
  23. #endif;  
  24.   
  25. //源文件  
  26. #include "dl_H.h"  
  27. template<class datatype>  
  28. L<datatype>::L()  
  29. {  
  30.     node<datatype> *s=NULL;  
  31.     s=new node<datatype>;  
  32.     s->next=NULL;  
  33.     front=rear=s;  
  34. }  
  35. template <class datatype>  
  36. L<datatype>::~L()  
  37. {  
  38.     node<datatype> *p=NULL;  
  39.     while(front !=NULL)  
  40.     {  
  41.         p=front->next;  
  42.         delete front;  
  43.         front=p;  
  44.     }  
  45. }  
  46. template<class datatype>  
  47. void L<datatype>::EQ(datatype x)  
  48. {  
  49.     node<datatype> *s=NULL;  
  50.     s=new node<datatype>;  
  51.     s->data=x;  
  52.     s->next=NULL;  
  53.     rear->next=s;  
  54.     rear=s;  
  55. }  
  56. template <class datatype>  
  57. datatype L<datatype>::DQ()  
  58. {  
  59.     node<datatype> *p=NULL;  
  60.     int x;  
  61.     if(rear==front) throw "下溢";  
  62.     p=front->next;  
  63.     x=p->data;  
  64.     front->next=p->next;  
  65.     if(p->next==NULL) rear=front;  
  66.     delete p;  
  67.     return x;  
  68. }  
  69. template <class datatype>  
  70. datatype L<datatype>::GQ()  
  71. {  
  72.     if(front!=rear)  
  73.         return front->next->data;  
  74. }  
  75. template<class datatype>  
  76. int L<datatype>::empty()  
  77. {  
  78.     if(front==rear)  
  79.         return 1;  
  80.     else  
  81.         return 0;  
  82. }  
  83.   
  84.   
  85. //主函数  
  86. #include<iostream>  
  87. using namespace std;  
  88. #include"dl_sf.cpp"  
  89.   
  90. void main()  
  91. {  
  92.     L<int>Q;  
  93.     if(Q.empty())  
  94.         cout<<"队列为空"<<endl;  
  95.     else  
  96.         cout<<"队列非空"<<endl;  
  97.     cout<<"对以下10个元素执行入队操作:"<<endl;  
  98.     try  
  99.     {  
  100.         Q.EQ(10);  
  101.         Q.EQ(16);  
  102.         Q.EQ(19);  
  103.         Q.EQ(34);  
  104.         Q.EQ(56);  
  105.         Q.EQ(13);  
  106.         Q.EQ(45);  
  107.         Q.EQ(15);  
  108.         Q.EQ(24);  
  109.         Q.EQ(77);  
  110.     }  
  111.     catch(char * wrong)  
  112.     {  
  113.         cout<<wrong<<endl;  
  114.     }  
  115.     cout<<"查看队头元素:"<<endl;  
  116.     cout<<Q.GQ()<<endl;  
  117.     cout<<"执行出队操作:"<<endl;  
  118.     try  
  119.     {  
  120.         Q.DQ();  
  121.     }  
  122.     catch(char * wrong)  
  123.     {  
  124.         cout<<wrong<<endl;  
  125.     }  
  126.     cout<<"查看队头元素:"<<endl;  
  127.     cout<<Q.GQ()<<endl;  
  128.         cout<<"执行出队操作:"<<endl;  
  129.     try  
  130.     {  
  131.         Q.DQ();  
  132.     }  
  133.     catch(char * wrong)  
  134.     {  
  135.         cout<<wrong<<endl;  
  136.     }  
  137.     cout<<"查看队头元素:"<<endl;  
  138.     cout<<Q.GQ()<<endl;  
  139.         cout<<"执行出队操作:"<<endl;  
  140.     try  
  141.     {  
  142.         Q.DQ();  
  143.     }  
  144.     catch(char * wrong)  
  145.     {  
  146.         cout<<wrong<<endl;  
  147.     }  
  148.     cout<<"查看队头元素:"<<endl;  
  149.     cout<<Q.GQ()<<endl;  
  150.         cout<<"执行出队操作:"<<endl;  
  151.     try  
  152.     {  
  153.         Q.DQ();  
  154.     }  
  155.     catch(char * wrong)  
  156.     {  
  157.         cout<<wrong<<endl;  
  158.     }  
  159.     cout<<"查看队头元素:"<<endl;  
  160.     cout<<Q.GQ()<<endl;  
  161. }  


0 0
原创粉丝点击