使用堆栈

时间:2017-11-08 18:37:04

标签: c++ struct stack

我正在尝试使用堆栈将十进制数转换为二进制数,我必须使用结构。

现在从我对结构的理解,我们可以在其中包含成员函数。堆栈遵循LIFO策略。

我们可以通过创建一个struct来创建一个堆栈,声明一些成员,并有一些函数来初始化和处理这些成员。

所以,我尝试用上面提到的东西和我的理解来声明一个结构,但我似乎仍然没有把这个概念弄好。我相信这是我的错误。但阅读论坛仍然没有帮助,因为我们还没有上过课程,而且每个论坛,结构和课程都是混杂的。

到目前为止,这是我的代码,我们非常感谢有关概念和逻辑的任何帮助和指导。

#include<iostream>
using namespace std;

struct bin{
int num[15];
int ci;

void init()
{
    ci = 0;
    for (int i = 0;i < 15;i++)
        num[i] = -1;
}

void push(int n)
{
    num[ci] = n;
    ci++;
}
int pop()
{
    int temp = num[--ci];
    num[ci] = -1;
    return temp;
}
};

int main()
{
int inp, count = 0;
bin var;
cout << "Enter a decimal number to convert into binary: ";
cin >> inp;

while (inp != 0)
{
    int rem = inp % 2;
    cout << "rem= " << rem << endl;
    inp /= 2;
    cout << "inp= " << inp << endl;
    var.push(rem);
    count++;
}
cout << "\nYour binary is: ";
while (count != 0)
{
    cout << var.pop();
    count--;
}

return 0;
}

我尽力找到错误但不能。所以,最后我简单地使用了数组并实现了如下代码

#include<iostream>
using namespace std;

void push(int bin[], int n, int &ci);
void init(int bin[], int &count, int &ci);
int pop(int bin[], int &ci);
void display(int bin[], int &count, int &ci);
void findBinary(int bin[], int &count, int&ci, int &inp);

int main()
{
int inp, count, ci;
int bin[20];
char c = '\0';

init(bin,count,ci);

    cout << "Enter a decimal number to convert into binary: ";
    cin >> inp;

    findBinary(bin, count, ci, inp);
    display(bin, count, ci);

return 0;
}

void init(int bin[], int &count, int &ci)
{
count = 0;
ci = 0;

for (int i = 0;i < 20;i++)
    bin[i] = -1;
}

int pop(int bin[], int &ci)
{
    int temp = bin[--ci];
    return temp;
}

void push(int bin[], int n, int &ci)
{
    bin[ci] = n;
    ci++;
}

void display(int bin[], int &count, int &ci)
{
    cout << "\nYour binary is: ";
    while (count != 0)
    {
        cout << pop(bin, ci);
        count--;
    }
    cout << endl;
}

void findBinary(int bin[], int &count, int&ci, int &inp)
{
    while (inp != 0)
    {
        int rem = inp % 2;
        inp /= 2;
        push(bin, rem, ci);
        count++;
    }
}

所以我的问题是:  1.当我们在结构中编写函数时,在创建结构类型对象时该函数是否运行?  2.我在第一个例子中使用struct实现堆栈的方法是否正确?

1 个答案:

答案 0 :(得分:0)

当您首次从<Root> <Rows> <Row> <F1>1A</F1> <F2>1B</F2> <F3>1C</F3> </Row> <Row> <F1>2A</F1> <F2>2B</F2> <F3>2C</F3> </Row> <Row> <F1>3A</F1> <F2>3B</F2> <F3>3C</F3> </Row> </Rows> </Root> struct创建对象时,constructor会运行 - 但没有其他功能(因此不是您的class功能)。如果您希望它运行,您需要明确地调用它:

init

就您的函数的实现而言:您应该使用边界检查来确保您不会推送超出您可以处理的项目,或者弹出超过队列中的项目。除此之外,我看不出他们有多大的不妥。考虑使用bin var; var.init(); 而不是数组,但是当您刚刚开始学习C ++时,您可能会在课程的后期进行介绍。

当您将构造函数添加到std::vector时,您也可以切换到使用struct。在C ++中,结构和类是等价的(使用结构中的默认访问修饰符为class的次要调整,而在类中它是public),所以不要让它让你失望。