使用数组实现堆栈

izzyk2517

我只是使用数组实现了一个堆栈,并对为什么人们以-1开始他们的顶峰感到好奇。从0开始效率更低吗?我有一个编程任务来实现一个执行基本功能的堆栈,并尝试自己做一个。

在使它起作用之后,我环顾四周以查看其他实现。大多数人从-1开始。这样做有好处吗?从0开始是错误的吗?

这是我的工作代码:

header file: 
#ifndef H_Stack
#define H_Stack

#include <iostream>
using namespace std;

struct nodeType
{
    int info;
    nodeType *link;
};

class arrayStack
{
private:
    int stackSize;
    int stackTop;
    int *stackArray;

public:
    arrayStack(const int &x);
    void push(const int &x);
    bool is_full();
    bool is_empty();
    int size();
    int top();
    void pop();
    ~arrayStack();
};

class linkedStack
{
private:
    nodeType *stackTop;

public:
    linkedStack();
    void push(const int &x);
    int size();
    int top();
    void pop();
    bool is_empty();
    ~linkedStack();
};

#endif

曝光档案:

#include "stack.h"

#include <iostream>
#include <cassert>
using namespace std;

arrayStack::arrayStack(const int &x)
{
    if (x <= 0)
    {
        stackSize = 20;
        stackArray = new int[stackSize];
    }

    else
    {
        stackTop = 0;
        stackSize = x;
        stackArray = new int[stackSize];
    }
}

bool arrayStack::is_full()
{
    return (stackTop == stackSize);
}

void arrayStack::push(const int &x)
{
    if (!is_full())
    {
        stackArray[stackTop] = x;
        stackTop++;
    }
}

bool arrayStack::is_empty()
{
    return (stackTop == 0);
}

int arrayStack::size()
{
    return stackSize;
}

int arrayStack::top()
{
    assert(stackTop != 0);

    return stackArray[stackTop - 1];
}

void arrayStack::pop()
{
    if (!is_empty())
        stackTop--; 

    else
    {
        cout << "can't pop from an empty stack.";
    }
}

arrayStack::~arrayStack()
{
    delete[] stackArray; 
}

linkedStack::linkedStack()
{
    stackTop = nullptr;
}

void linkedStack::push(const int &x)
{
    nodeType *newNode;
    newNode = new nodeType;
    newNode->info = x;
    newNode->link = stackTop;
    stackTop = newNode;
}

int linkedStack::size()
{

    int count = 0;
    nodeType *temp;
    temp = stackTop;

    while (temp != nullptr)
    {
        temp = temp->link;
        count++;
    }

    return count;
}

int linkedStack::top()
{
    assert(stackTop != nullptr);

    return stackTop->info;
}

void linkedStack::pop()
{
    assert(!is_empty());

        nodeType *temp = stackTop;
        stackTop = stackTop->link;
        delete temp;

}

bool linkedStack::is_empty()
{
    return (stackTop == nullptr);
}

linkedStack::~linkedStack()
{
    while (stackTop != nullptr)
    {
        pop();
    }
}

它成功弹出/推送。它不是圆形的,因此效率不高或非常有用...但是我不得不为学校写它。

暗影游侠

使用开头的top-1可以使您push仅使用以下代码即可实现

    stackArray[++stackTop] = x;

就是说,最初的top0只需要一个同样高效的,甚至稍微冗长的两层式:

    stackArray[stackTop] = x;
    ++stackTop;

或将其保持为单线:

    stackArray[stackTop++] = x;

只要top是原始类型,后者就可以了(对于用户定义的类,后递增的效率明显较低,因为它必然包含状态的完整副本;有些人在C ++中避免了后递增通常会养成不会对用户定义的类造成问题的习惯)。

要点是,-1vs没有特别的好处0您正在查看的代码可能共享一些约定,但是所有约定都可以使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Java中使用数组实现堆栈

来自分类Dev

使用数组,计数和索引实现堆栈

来自分类Dev

在Java中使用数组实现堆栈

来自分类Dev

堆栈和队列:使用数组更容易实现?

来自分类Dev

使用灵活的数组成员实现堆栈

来自分类Dev

为什么要使用链接列表而不是数组或向量实现来实现堆栈或队列?

来自分类Dev

(在C中)使用数组实现堆栈-将数组大小加倍时出现运行时错误

来自分类Dev

您将使用什么来实现两个堆栈队列?基于数组的堆栈还是链表堆栈?两个队列堆栈呢?

来自分类Dev

使用函数调用实现堆栈

来自分类Dev

使用链表实现堆栈损坏

来自分类Dev

使用 o(1) 实现堆栈

来自分类Dev

C中基于数组的堆栈实现

来自分类Dev

使用数组的第一个元素作为顶部实现堆栈

来自分类Dev

使用调用堆栈在C中实现堆栈数据结构?

来自分类Dev

使用堆栈实现优先级队列

来自分类Dev

使用2个堆栈实现队列

来自分类Dev

使用堆栈实现深度受限的路径查找

来自分类Dev

如何使用std :: vector实现堆栈?

来自分类Dev

使用堆栈实现优先级队列

来自分类Dev

使用2个队列实现堆栈

来自分类Dev

在我的实现中使用堆栈是否正确?

来自分类Dev

堆栈ADT(抽象数据类型)实现-数组与链接

来自分类Dev

C中的堆栈数组实现-通过引用理解

来自分类Dev

使用数组作为参数的堆栈跟踪错误

来自分类Dev

使用c的堆栈推送功能,使用双向链表实现

来自分类Dev

如何实现堆栈上堆栈?

来自分类Dev

使用数组的Swift ViewModel实现

来自分类Dev

使用数组实现最小堆

来自分类Dev

如何使用Java 8 Stream实现堆栈迭代