实验四 链栈

来源:互联网 发布:合肥编程培训班 编辑:程序博客网 时间:2024/05/22 00:44
一、实验目的

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

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


二、实验内容

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

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

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

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


三、源代码

头文件

#ifndef LinkStack_H#define LinkStack_Htemplate<class DataType>struct Node{      DataType data;      Node<DataType> *next;  };  template<class DataType>class LinkStack{public:        LinkStack();/*构造函数*/        ~LinkStack();/*析构函数 释放链栈中各节点的存储空间*/        void Push(DataType x);/*入栈操作*/        DataType Pop();/*出栈操作*/        DataType GetTop();    /*取栈顶元素*/        int Empty();/*判空操作private:        Node<DataType>*top;/*栈顶指针即链栈的头指针*/};#endif;
源文件

#include"LinkStack.h"/*引入类LinkStack的声明*/template<class DataType>LinkStack<DataType>::LinkStack(){top=NULL;}template<class DataType>LinkStack<DataType>::~LinkStack(){Node<DataType>*q=NULL;while(top!=NULL){q=top;delete q;}}template<class DataType>void LinkStack<DataType>::Push(DataType x){Node<DataType>*s=NULL;    s=new Node<DataType>;s->data=x;    s->next=top;top=s;}template<class DataType>DataType LinkStack<DataType>::Pop(){Node<DataType>*p=NULL;    if(top==NULL)throw"下溢";int x;    x=top->data;p=top;    top=top->next;    delete p;    return x;}template<class DataType>DataType LinkStack<DataType>::GetTop(){    if(top!=NULL)        return top->data;}template<class DataType>int LinkStack<DataType>::Empty(){    if(top==NULL)return 1;    else return 0;}


主函数

#include<iostream>using namespace std;#include"LinkStack.cpp"void main(){    LinkStack<int> L;    if(L.Empty())        cout<<"栈为空"<<endl;    else        cout<<"栈非空"<<endl;    cout<<"对20和12执行入栈操作"<<endl;    L.Push(20);    L.Push(12);    cout<<"栈顶元素为:"<<endl;    cout<<L.GetTop()<<endl;    cout<<"执行依次出栈操作"<<endl;    L.Pop();    cout<<"栈顶元素为:"<<endl;    cout<<L.GetTop()<<endl;}

四、效果图



五、实验心得
参考实验书进行比照练习,需要勤加学习,认真搞懂代码含义

原创粉丝点击