实验4:栈和队列的基本操作实现及其应用之《链队列》

来源:互联网 发布:盖伊福克斯面具淘宝 编辑:程序博客网 时间:2024/05/16 02:05

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

一、实验目的

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

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

二、实验内容

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

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

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

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

3、选做题(*

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

三、实验步骤

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

    实验中选用的是整型来进行栈的数据输入。

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

   入队列:只考虑在链表的尾部进行,链队列带头结点,让队头指针和队尾指针均指向头结点。

   出队列:只考虑在链队列的头部进行,需要注意队列长度等于1的特殊情况。

3、完整程序;   

#include<iostream>using namespace std;const int S=10;struct Node{int data;Node *next;};class LinkQueue{public:LinkQueue();void Push(int x);int Pop();int Gettop(){ if(front!=rear) return front->next->data; }int Empty(){if(front==rear)return 1; else return 0;}private:   Node *front,*rear;};LinkQueue::LinkQueue(){Node *s;s=new Node;s->next=NULL;front=rear=s;}void LinkQueue::Push(int x){        Node *s;    s=new Node;s->data=x;    s->next=NULL;    rear->next=s;rear=s;}int LinkQueue::Pop(){       int x;    Node *p;if(rear==front) throw"下溢";p=front->next;x=p->data;front->next=p->next;if(p->next==NULL) rear=front;delete p;return x;}int main(){       int i,s,x;LinkQueue Stact;do{cout<<endl<<"\t\t\t   链队列"<<endl<<"\t\t\t输入进队列的数:";cin>>i;cout<<"\t\t\t是否继续输入?(1/0):";cin>>s;Stact.Push(i);}while(s);while(1){cout<<endl<<"\t\t\t   链队列"; cout<<endl<<"\t\t\t 1、入队列";cout<<endl<<"\t\t\t 2、出队列";cout<<endl<<"\t\t\t 3、队列顶数";cout<<endl<<"\t\t\t 4、队列是否为空";    cout<<endl<<"\t\t\t请选择操作(0-4):";cin>>x;cout<<endl;if(x==0)break;switch(x)   {case 1:                                   {   do          {            cout<<endl<<"\t\t\t输入进队列的数:";        cin>>i;        cout<<"\t\t\t是否继续输入?(1/0):";        cin>>s;        Stact.Push(i);          }        while(s);        break;}case 2:      {    cout<<"\t\t\t出队列:"<<Stact.Pop()<<endl;    break;    }    case 3:    {    cout<<"\t\t\t队列顶数:"<<Stact.Gettop()<<endl;    break;    }    case 4:    {    cout<<"\t\t\t队列是否为空:"<<Stact.Empty();    break;        }default:{cout<<"\t\t\t请输入数字(0-5)!"<<endl;}     }     }}

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


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

      在链队列中,运用循环的方式来进行入队列。链队列不同于循环队列,是用指针来实现的,所以不存在“假溢出”问题。

阅读全文
0 0
原创粉丝点击