Циклический линейный список
Здравствуйте...
Вот у меня тут есть задание, чтобы вас не грузить не буду пока сразу всё писать...
Но вот одна из базовых частей создание - создать односвязный циклический список.
Я пытался пытался ещё с прошлой недели - к сожалению не получается, странные ошибки выдаёт...
Помогите пожалуйста разобраться.
Код:
#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;
struct list
{
int data;
list* next;
};
//Function prototypes:
void Create_file(fstream&f, char* filename);
void Read_file(fstream&f, char* filename);
void Create_list(list* first, fstream&f, char* filename);
void Add_last(list* first, int a);
void Add_first(list* &first, int a);
void Read_list(list* first);
void main()
{
fstream f; char filename[20];
int i=0;
list* first;
first = NULL;
cout << "Enter filename: ";
cin >> filename;
Create_file(f, filename);
cout << endl;
Read_file(f, filename);
cout << endl;
Create_list(first, f, filename);
cout << endl;
Read_list(first);
cout << endl;
cin.get();
}
void Create_file(fstream&f, char* filename)
{
int x;
f.open(filename, ios::out|ios::binary);
cout << "Enter number(enter 9999 to break) ";
cin >> x;
while(x != 9999)
{
f.write((char*)&x, sizeof x);
cin >> x;
}
f.close();
}
void Read_file(fstream&f, char* filename)
{
int x;
f.open(filename, ios::in|ios::binary);
while(f.read((char*)&x, sizeof x))
{
cout << x << " ";
}
f.close();
}
void Create_list(list* first, fstream&f, char* filename)
{
f.open(filename, ios::binary|ios::in);
if(f.eof())
{
f.clear();
f.seekg(0);
}
int a; list* p;
while(f.read((char*)&a, sizeof a))
{
if(first==NULL)
{
Add_first(first, a);;
}
else
{
Add_last(first, a);
}
}
f.close();
}
void Add_first(list* &first, int a)
{
list* p;
p = new list;
p ->data = a;
p ->next = NULL;
first = p;
first ->next = first;
}
void Add_last(list* first, int a)
{
list* q;
q = new list;
q -> data = a;
q -> next = first;
list* p;
p = first;
while (p -> next != first)
p = p -> next;
p -> next = q;
}
void Read_list(list* first)
{
list* p;
p = first;
//Что-то тут будет...
}
Собственно при пошаговой откладке ошибка вылетала именно на функции Add_last...
|