实验3:栈和队列的基本操作实现及其应用
一、实验目的
1、 熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。
2、 学会使用栈和队列解决实际问题。
二、实验内容
1、自己确定结点的具体数据类型和问题规模:
分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。
分别建立一个顺序队列和链队列,实现队列的入队和出队操作。
2、设计算法并写出代码,实现一个十将二进制转换成2进制数。
3、选做题(*)
设计一个模拟饭堂排队打饭管理软件,实现“先来先打饭”的排号叫号管理。
三、实验步骤
1、依据实验内容分别说明实验程序中用到的数据类型的定义;
2、相关操作的算法表达;
3、完整程序;
4、总结、运行结果和分析。
5、总体收获和不足,疑问等。
四、实验要求
1、 按照数据结构实验任务书,提前做好实验预习与准备工作。
2、 加“*”为选做题。做好可加分。
3、 严格按照数据结构实验报告模板和规范,及时完成实验报告。
4、 在个人主页上发文章提交作业。
5、 实验课会抽查3-5人,希望你可以被查到!
顺序队列和链队列
1、顺序队列
头文件:
#include
using namespace std;
Cirqueue类:
class Cirqueue
{
private:
int data[Size];
int front,rear;
public:
Cirqueue(){front = rear = Size-1;}
~Cirqueue(){}
void Enqueue(int a[],int n);
void Dequeue();
};
入队函数:
void Cirqueue::Enqueue(int a[],int n)
{
for(int i=0;i
{
rear = (rear+1)%Size;
data[rear] = a[i];
};
}
出队函数:
void Cirqueue::Dequeue()
{
while(front!=rear)
{
front = (front+1)%Size;
cout<
}
}
主函数:
void main()
{
Cirqueue a;
int number[8] = {0,1,2,3,4,5,6,7};
a.Enqueue(number,8);
a.Dequeue();
}
2、链队列
头文件:
#include
using namespace std;
Node结构体:
struct Node
{
int data;
Node * next;
};static Node *front,*rear;
入队函数:
void Enqueue(int a[],int n)
{
Node * s = NULL;
s = new Node;
front = rear=s;
for(int i=0;i
{
s = new Node;
s->data = a[i];
s->next = NULL;
rear->next = s;
rear = s;
};
}
出队函数:
void Dequeue()
{
while(front->next != NULL)
{
Node * p = front->next;
cout<data<
front->next = p->next;
delete p;
}
}
主函数:
void main()
{
int number[8] = {0,1,2,3,4,5,6,7};
Enqueue(number,8);
Dequeue();
}3、实验结果(以上两个结果相同)