【发布时间】:2015-03-14 14:17:20
【问题描述】:
我正在尝试将我的两个双向链表初始化为空,但我的程序崩溃了。该程序从文本文件中分离偶数和奇数。我相信问题出在 InitializeList 函数中,但我尝试了几种不同的方法都无济于事。我需要将它们都初始化为:
Odds->top = NULL;
Odds->length = 0;
Evens->top = NULL;
Evens->length = 0;
谁能指出我做错了什么?
代码:
#include <iostream>
#include <fstream>
#include <cstddef>
#include <stdlib.h>
using namespace std;
struct node{
int integer;
node *next;
node *prev;
};
struct list{
int length;
node *top;
};
bool EmptyList(list* head)
{
bool empty;
if(head == NULL)
empty = true;
else
empty = false;
return empty;
}
list* InitializeList(list* A_list)
{
A_list->top = NULL;
A_list->length = 0;
return A_list;
}
bool OrderedListInsertion(list* &A_list, int number, int &counter)
{
bool repeat,
success;
node *newOdd;
node *newEven;
node *EvenHead;
node *oddHead;
if((number % 2) == 0)
{
A_list = new list;
newEven = new (nothrow) node;
A_list->top = newEven;
if(counter == 0)
{
if(newEven == NULL)
{
cout << "ERROR. Memory allocation failed!" << endl;
success = false;
}
else
{
newEven->integer = number;
newEven->next = NULL;
newEven->prev = NULL;
EvenHead = newEven;
success = true;
}
}
else
{
if(newEven == NULL)
{
cout << "ERROR. Memory allocation failed!" << endl;
success = false;
}
else
{
newEven->integer = number;
newEven->prev = EvenHead;
newEven->next = NULL;
EvenHead = newEven;
success = true;
}
}
}
if((number % 2) != 0)
{
A_list = new list;
if(counter == 0)
{
newOdd = new (nothrow) node;
if(newOdd == NULL)
{
cout << "ERROR. Memory allocation failed!" << endl;
success = false;
}
else
{
newOdd->integer = number;
newOdd->prev = NULL;
oddHead = newOdd;
newOdd->next = NULL;
success = true;
}
}
else
{
newOdd = new (nothrow) node;
if(newOdd == NULL)
{
cout << "ERROR. Memory allocation failed!" << endl;
success = false;
}
else
{
newOdd->integer = number;
newOdd->prev = newOdd;
success = true;
}
}
}
return success;
}
int ReadFirst(list* &Odds, list* &Evens)
{
string file1 = "Int1.txt";
ifstream ReadInts;
int number;
int x = 0,
y = 0;
bool success;
ReadInts.open(file1.c_str());
ReadInts >> number;
do
{
if((number % 2) == 0)
{
success = OrderedListInsertion(Evens, number, x);
if(success)
{
x++;
cout << "Even processed." << endl;
}
else
return 1;
}
if((number % 2) != 0)
{
success = OrderedListInsertion(Odds, number, y);
if(success)
{
y++;
cout << "Odd processed." << endl;
}
else
return 1;
}
ReadInts >> number;
}while(ReadInts);
ReadInts.close();
}
int main()
{
list* Odds;
list* Evens;
Odds = InitializeList(Odds);
Evens = InitializeList(Evens);
ReadFirst(Odds, Evens);
return 0;
}
【问题讨论】:
-
程序编译但运行时不显示任何内容。
标签: c++ struct null linked-list doubly-linked-list