Итак, я написал несколько базовых c операций для изучения очередей. Проблема в том, что при запуске программы происходит сбой, и я не знаю почему. Код: header
#ifndef HEADER_H_
#define HEADER_H_
typedef int Atom;
struct Element {
Atom info;
Element* succ;
};
struct Queue {
Element *head, *tail;
};
Queue InitQ(void);
bool IsEmpty(Queue q);
void Put(Queue& q, Atom x);
Atom Get(Queue& q);
void PrintQ(Queue q);
#endif
функции
#include <iostream>
#include "header.h"
using namespace std;
Queue InitQ(void)
{
Queue q;
q.head = q.tail = 0;
return q;
}
bool IsEmpty(Queue q)
{
if (q.head == NULL && q.tail == NULL)
return true;
else
return false;
}
void Put(Queue& q, Atom x)
{
Element *p = new Element;
if (q.head == nullptr)
{
q.head = q.tail = p;
}
else
{
q.tail = q.tail->succ = p;
}
}
Atom Get(Queue& q)
{
Element* p = q.head;
int aux;
aux = p->info;
q.head = p->succ;
if (q.head == nullptr) q.tail = nullptr;
delete(p);
return aux;
}
void PrintQ(Queue q)
{
if (IsEmpty(q))
{
cout << "Empty queue";
}
else
{
Element* p = q.head;
while (p != NULL)
{
cout << p->info << " ";
p = p->succ;
}
}
}
основной файл
#include <iostream>
#include "header.h"
using namespace std;
int main()
{
Queue q=InitQ();
Put(q,2);
Put(q, 3);
Put(q, 7);
PrintQ(q);
Get(q);
PrintQ(q);
return 0;
}
Когда я вызываю функцию Put, программа разрушает. Я думаю, что нет Назовите это хорошим способом. Можете ли вы объяснить, как это назвать?
edit: я отредактировал код, теперь программа показывает мне несколько больших чисел, а затем разбивает. Что я делаю неправильно?