数据结构:实验四栈和队列的基本操作实现及其应用

一、实验目的

1,熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。
2,学会使用栈和队列解决实际问题。

二、实验内容

1,自己确定结点的具体数据类型和问题规模:
分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。
分别建立一个顺序队列和链队列,实现队列的入队和出队操作。
2,设计算法并写出代码,实现一个十将二进制转换成2进制数。“

三.实验报告
1.实验代码如下:

#include
using namespace std;

template < typename T >
struct Node
{
    T data;
    Node *next;
};

template < typename T >
class LinkStack {
public:
    LinkStack(T array[], int n)
    {
        top = NULL;
        Node *node = NULL;
        for (int i = 0; i < n; i++) {
            node = new Node;
            node->data = array[i];
            node->next = top;
            top = node;
        }
    }

    ~LinkStack()
    {
        Node *deleteNode = NULL;
        deleteNode = top;
        top = top->next;
        delete deleteNode;
    }

    void push(T x);
    T pop();
    void print();
    T gettop() { if (top != NULL) return top->data; }
    int Empty() { top == NULL ? return 1 : return 0; }
private:
    Node  *top;
};

template < typename T >
void LinkStack::push(T x)
{
    Node *s;
    s = new Node;
    s->data = x;
    s->next = top;
    top = s;
}

template < typename T >
T LinkStack::pop()
{
    T x;
    Node *p;
    if (top == NULL)throw"下溢";
    x = top->data; p = top;
    top = top->next;
    delete p;
    return x;
}

template <class T>
void LinkStack::print()
{
    Node *node = top;
    while (node->next != NULL) {
        cout << node->data << " ";
        node = node->next;
    }
    cout << node->data << endl;
}

void main()
{
    int arr[] = { 1,2,3,4,5 };
    cout << "创建对象:1,2,3,4,5依次入栈 " << endl;
    LinkStack<int> a(arr, 5);
    cout << "遍历栈内的元素:";
    a.print();
    cout << "出栈一个元素" << a.pop() << endl;
    cout<<"结果如下:" ;
    a.print();
    cout << "现在栈顶元素为:" << a.gettop();
    cout << "入栈元素6~10:" << endl;
    for (int i = 6; i <= 10; i++)
    {
        a.push(i);
    }
    cout << "遍历栈内的元素:";
    a.print();
}

2.实验结果
数据结构:实验四栈和队列的基本操作实现及其应用_第1张图片

四.实验总结
创立对象1,2,3,4,5依次入栈,遍历结果5,4,3,2,1,出栈一个元素5,得遍历结果4,3,2,1,入栈元素6,7,8,9,10,遍历结果10,9,8,7,6,4,3,2,1.

你可能感兴趣的:(数据结构,作业)