C++ 指针错误队列
嗨。我有一串数字,如上图所示。我想使用最少数量的队列按降序打印它们。输入的行为也类似于队列 我的想法是从右边取第一个数字并创建一个队列。然后,检查每个数字是否大于任何队列中的第一个数字。如果是,则将其添加到该队列中。如果不是,则创建一个新队列并重复该过程 我编写了以下代码:C++ 指针错误队列,c++,queue,C++,Queue,嗨。我有一串数字,如上图所示。我想使用最少数量的队列按降序打印它们。输入的行为也类似于队列 我的想法是从右边取第一个数字并创建一个队列。然后,检查每个数字是否大于任何队列中的第一个数字。如果是,则将其添加到该队列中。如果不是,则创建一个新队列并重复该过程 我编写了以下代码: #include<iostream> using namespace std; struct Nod{ int info; Nod *urm; }; void push(Nod *&p
#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");
}
您从未初始化p1和u1数组,因此在测试它们时不能保证指针为空。简单地为您使用有什么不对?@Eelke非常感谢!我不知道我忘记初始化指针了。现在它工作了!
if (s[i]-'0' >= p1[k]->info)