实验四 顺序栈和链队列的操作

实验四 顺序栈和链队列的操作

一.实验目的

1.掌握栈的顺序存储结构;验证顺序栈及其基本操作的实现;验证栈的操作特性。

2.掌握队列的链接存储结构;验证链队列的存储结构和基本操作的实现;验证队列的操作特性。

二.问题描述

1.建立一个空栈;对已建立的栈进行插入、删除、取栈顶元素等基本操作。

2.建立一个空队列;对已建立的队列进行插入、删除、取队列元素等基本操作。

三.实验要求

1.根据栈的操作特性顺序实现栈的操作;编写适当的主程序代码验证栈的相关操作。

2.定义链队列的数据类型——链队列类LinkQueue,包括入队、出队、取队头元素等基本操作;链队列类LinkQueue的定义以及基本操作的算法请参见教材3.2.3节。

 四.实验环境

PC微机

DOS操作系统或Windows操作系统

Turbo C程序集成环境或Visual C++程序集成环境

五.实验步骤及结果

1.根据栈的操作特性顺序实现栈的操作;编写适当的主程序代码验证栈的相关操作。

1.建立一个SeqStack_h头文件

#ifndef SeqStack_H

#define SeqStack_H

const int StackSize=10;

template<class DataType>

class SeqStack

{

      public:

      SeqStack();

      ~SeqStack(){}

      void Push(DataType x);

      DataType Pop();

      DataType GetTop();

      int Empty();

      private:

             DataType data[StackSize];

             int top;

};

#endif

2.建立一个SeqStack.cpp文件

#include"SeqStack.h"

template<class DataType>

SeqStack<DataType>::SeqStack()

{

      top=-1;

}

template<class DataType>

void SeqStack<DataType>::Push(DataType x)

{

      if(top==StackSize-1)throw"上溢";

      top++;

      data[top]=x;

}

template<class DataType>

DataType SeqStack<DataType>::Pop ()

{

      DataType x;

      if(top==-1)throw"下溢";

      x=data[top--];

      return x;

}

template<class DataType>

DataType SeqStack<DataType>::GetTop ()

{

      if(top!=-1)

         SeqStack_H

    return data[top];

}

template<class DataType>

int SeqStack<DataType>::Empty ()

{

      if(top==-1)return 1;

      else return 0;

}

3、建立SeqStack_main文件

#include<iostream>

using namespace std;

#include"SeqStack.cpp"

void main()

{

      SeqStack<int>S;

      if(S.Empty ())

             cout<<"栈为空"<<endl;

      else

             cout<<"栈非空"<<endl;

      cout<<"1510执行入栈操作"<<endl;

      S.Push (15);

      S.Push (10);

      cout<<"栈顶元素为:"<<endl;

      cout<<S.GetTop ()<<endl;

      cout<<"执行一次出栈操作"<<endl;

      S.Pop ();

      cout<<"栈顶元素为:"<<endl;

      cout<<S.GetTop ()<<endl;

}

 

实验二:建立一个空队列;对已建立的队列进行插入、删除、取队列元素等基本操作。

1、新建一个LinkQueue文件如图:

#ifndef LinkQueue_H

#define LinkQueue_H

template<class DataType>

struct Node

{

DataType data;

Node<DataType>*next;

};

template<class DataType>

class LinkQueue

{

public:

LinkQueue()

~LinkQueue();

void EnQueue(DataType x);

DataType DeQueue();

DataType GetQueue();

int Empty();

private:

    Node<DataType>*front,*rear;

};

#endif;

2、新建一个LinkQueue.cpp文件如图:

#include" LinkQueue.h"

template<class DataType>

 LinkQueue<DataType>:: LinkQueue()

{

Node<DataType>*s=NULL;

s=new Node<DataType>;

s->next=NULL;

front=rear=s;

}

template<class DataType>

LinkQueue<DataType>:: ~LinkQueue()

{

Node<DataType>*p=NULL;

while(front!=NULL)

{

      p=front->next;

      delete front;

      front=p;

}

}

template<class DataType>

void LinkQueue<DataType>:: EnQueue(DataType x)

{

Node<DataType>*s=NULL;

s=new Node<DataType>;

s->data=x;

s->next=NULL;

rear->next=s;rear=s;

}

template<class DataType>

DataType LinkQueue<DataType>:: DeQueue()

{

       Node<DataType>*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 DataType>

DataType LinkQueue<DataType>:: GetQueue()

 {

        if(front!=rear)

        return front->next->data;

 }

template<class DataType>

int LinkQueue<DataType>::Empty ()

{

       if(front=rear)

       return 1;

       else

       return 0;

}

3、新建一个LinkQueue_main主文件如图:

#include<iostream>

using namespace std;

#include"LinkQueue.cpp"

void main()

{

       LinkQueue<int>Q;

       if(Q.Empty ())

              cout<<"队列为空"<<endl;

       else

cout<<"队列非空"<<endl;

       cout<<"元素25执行入队操作:"<<endl;

       try

       {

                Q.EnQueue (2);

                Q.EnQueue (5);

       }

       catch(char*wrong)

       {

              cout<<wrong<<endl;

       }

           cout<<"查看队头元素"<<endl;

           cout<<Q.EnQueue ()<<endl;

           cout<<"执行出队操作:"<<endl;

       try

       {

              Q.DeQueue ();

       }

catch(char*wrong)

{

       cout<<wrong<<endl;

}

cout<<"查看队头元素:"<<endl;

cout<<Q.DeQueue ()<<endl;

}

 

 

 

 

六.实验小结

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值