实验3:栈和队列的基本操作实现及其应用——顺序栈和链栈

来源:互联网 发布:java 在类中定义接口 编辑:程序博客网 时间:2024/05/22 10:47

实验3:栈和队列的基本操作实现及其应用

一、实验目的

1、   熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。

2、      学会使用栈和队列解决实际问题。

二、实验内容

1、自己确定结点的具体数据类型和问题规模:

分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。

分别建立一个顺序队列和链队列,实现队列的入队和出队操作。

2、设计算法并写出代码,实现一个十将二进制转换成2进制数。

3、选做题(*

设计一个模拟饭堂排队打饭管理软件,实现“先来先打饭”的排号叫号管理。

三、实验步骤

1、依据实验内容分别说明实验程序中用到的数据类型的定义;

2、相关操作的算法表达;

3、完整程序;

4、总结、运行结果和分析。

5、总体收获和不足,疑问等。

四、实验要求

1、   按照数据结构实验任务书,提前做好实验预习与准备工作。

2、   加“*”为选做题。做好可加分。

3、   严格按照数据结构实验报告模板和规范,及时完成实验报告。

4、   在个人主页上发文章提交作业。

5、   实验课会抽查3-5人,希望你可以被查到!


顺序栈和链栈


1、顺序栈

头文件:
#include<iostream>  using namespace std; 

Conversion类:
const int Size = 50;   class Conversion  {  private:       int data[Size];      int top;  public:      Conversion(){top=-1;}      ~Conversion(){}      void Push(int a[],int n);      void Pop();  };  

压栈函数:
void Conversion::Push(int a[],int n)  {    top=-1; if(top==Size-1) throw "上溢";for(int i=0;i<n;i++)      {      data[++top]= a[i];     };}   

出栈函数:
void Conversion::Pop()  {      if (top == -1) throw "下溢";      while(top!=-1)      {      int x=data[top--];      cout<<x<<endl;      }  } 

主函数:
void main()  {       Conversion a;    int number[8] = {0,1,2,3,4,5,6,7};     a.Push(number,8);      a.Pop(); } 

2、链栈

头文件:
#include<iostream>  using namespace std;

Node结构体:
struct Node{int data;Node * next;}; 
static Node * top;

压栈函数:
void Push(int a[],int n)  {   top = new Node;top->next = NULL;Node * s = NULL;    for(int i=0;i<n;i++)      {  s = new Node;s->data = a[i];s->next = top;top = s;     }; }   

出栈函数:
void Pop()  {while(top->next!=NULL){Node * p = top;        cout<<top->data<<endl;         top = top->next;delete p;}} 

主函数:
void main()  {      int number[8] = {0,1,2,3,4,5,6,7};     Push(number,8);      Pop(); }  

3、实验结果(以上两个都一样)




阅读全文
0 0