您好。我有一串数字,如上图所示。我想使用最少数量的队列以递减顺序打印它们。输入也像队列一样。
我的想法是从右边取第一个数字并创建一个队列。然后为每个其他数字检查它是否大于任何队列中的第一个数字。如果是,请将其添加到该队列。如果不是,请创建一个新队列并重复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)