指针错误队列

时间:2014-12-29 10:38:47

标签: c++ queue

enter image description here

您好。我有一串数字,如上图所示。我想使用最少数量的队列以递减顺序打印它们。输入也像队列一样。

我的想法是从右边取第一个数字并创建一个队列。然后为每个其他数字检查它是否大于任何队列中的第一个数字。如果是,请将其添加到该队列。如果不是,请创建一个新队列并重复procces。

我写了以下代码:

#include<iostream>
using namespace std;

struct Nod{
    int info;
    Nod *urm;
};

void push(Nod *&p, Nod *&u, int info){
    if (p == NULL)
    {
        p = new Nod;
        p->info = info;
        u = p;
        u->urm = NULL;
    }
    else
    {
        Nod *q = new Nod;
        q->info = info;
        q->urm = p;
        p = q;
    }
}

void pop(Nod *&p, Nod *&u)
{
    if (p != NULL){
        Nod *q = p;
        if (q->urm != NULL){
            while (q->urm->urm != NULL)
            {
                q = q->urm;
            }
            delete u;
            u = q;
            u->urm = NULL;
        }
        else
            p = NULL;
    }
    else
        cout << "Empty Queue";
}

void print(Nod *p)
{
    cout << endl;
    Nod *q = p;
    while (q != NULL)
    {
        cout << q->info << " ";
        q = q->urm;
    }
    cout << endl;
}

int main()
{
    Nod *p, *u;
    p = u = NULL;

    Nod *p1[100];
    Nod *u1[100];

    char * s;
    s = new char[100];
    cin >> s;

    push(p1[0], u1[0], s[(unsigned)strlen(s) - 1]-'0');

    for (int i = (unsigned)strlen(s) - 2; i >= 0; i--){
        int k = 0; int ok = 0;
        while (p1[k] != NULL)
        {
            if (s[i]-'0' >= p1[k]->info)
            {
                push(p1[k], u1[k], s[i]-'0');
                ok = 1;
                break;
            }
            k++;
        }
        if (ok == 0)
            push(p1[k], u1[k], s[i]-'0');
    }

    //test printing first 3 lines.
    print(p1[0]);
    print(p1[1]);
    print(p1[2]);
    system("Pause");
}

我在这一行崩溃了,我相信这是由指针错误造成的?我正在使用Visual Studio 2013.我已经尝试使用调试器,但我仍然无法弄清楚问题是什么。我还想问一下你是否可以给我一些关于如何使用调试器的基本资源。谢谢。

if (s[i]-'0' >= p1[k]->info)

0 个答案:

没有答案