All pastes #782171 Raw Edit

Miscellany

public cpp v1 · immutable
·published 2007-11-19 03:34 UTC
rendered paste body
#include <iostream>#include <stdlib.h>#include "FlowList.h"#include <fstream>using namespace std;FlowList::FlowList()	:headM(0){}FlowList::FlowList(const FlowList& source){	copy(source);}FlowList::~FlowList(){	destroy();}FlowList& FlowList::operator = (const FlowList& rhs){	if (this != &rhs)	{		destroy();		copy(rhs);	}	return *this;}double FlowList::average() const{	double sum = 0;	Node *p;	if (headM == NULL)		return 0;	p = headM;	while (p != NULL)	{		sum = sum + p -> item.flow;		p = p -> next;	}	return sum/count();}double FlowList::median() const{	int i=0;	double sum =0;	Node *q;	q = headM;	if (count()%2 == 0)	{		for (i = 0; i < (count()/2 -2); i++)		{			q = q -> next;		}		sum = q -> item.flow;		q = q -> next;		sum = sum + q -> item.flow;		return sum/2;	}	if (count()%2 == 1)	{		for (i = 0; i < (count()/2 - 1); i++)		{			q = q -> next;		}		return q -> item.flow;	}}void FlowList::insert(const ListItem& itemA){	Node *new_node = new Node;	new_node -> item.year = itemA.year;	new_node -> item.flow = itemA.flow;	if (headM == NULL || itemA.flow <= headM -> item.flow)	{		new_node -> next = headM;		headM = new_node;	}	else	{		Node *before = headM;		Node *after = headM -> next;		while (after != NULL && itemA.flow > after -> item.flow)		{			before = after;			after = after -> next;		}		if (itemA.flow == after -> item.flow)		{			cout<<"Error: duplicate year"<<endl;		}		else		{			new_node -> next = after;			before -> next = new_node;			cout<<"New record inserted successfully."<<endl;		}	}}void FlowList::remove(const ListItem& itemA){	if (headM == NULL || headM -> item.year > itemA.year)		return;	Node *doomed_node = NULL;	if (itemA.year == headM -> item.year)	{		doomed_node = headM;		headM = headM -> next;	}	else	{		Node *before = headM;		Node *maybe_doomed = headM -> next;		while(maybe_doomed != 0 && itemA.year != maybe_doomed->item.year)		{      		before = maybe_doomed;      		maybe_doomed = maybe_doomed->next;    		}		if (maybe_doomed != 0 && maybe_doomed->item.year == item.year) 		{		  doomed_node = maybe_doomed;		  before -> next = maybe_doomed -> next;		  cout<<"Record was successfully removed."<<endl;		}	}	delete doomed_node;}int FlowList::count() const{	int i=1;	Node *m;	m = headM -> next;	while(m != NULL)	{		i++;		m = m -> next;	}}void FlowList::destroy(){	Node *R;	R = headM;	headM = headM -> next;	delete R;}void FlowList::copy(const FlowList& source){	Node *s;	Node *t;	if (source.headM == NULL)	{		headM = NULL;	}	else	{		destroy();		headM = new Node;		s = source.headM -> next;		t = headM;		headM -> item = source.headM -> item;		headM -> next = NULL;		while(s != NULL)		{			t -> next = new Node;			t = t -> next;			t -> item = s -> item;			t -> next = NULL;			s = s -> next;		}	}}void FlowList::display(){	Node *m;	m = headM;	while (m != NULL)	{		cout<<"Year		Flow (in billions of cubic meters)"<<endl;		cout<<"-------------------------------------------"<<endl;		cout<<m -> item.year<<"		"<<m -> item.flow<<endl;		m = m -> next;	}}void FlowList::export(){	ofstream outObj;	Node *n;	n = headM;	outObj.open("flow.dat");	if (!outObj)	{		cout<<"There was an error opening the file."<<endl;		return;	}	while(n != NULL)	{		outObj<<n -> item.year<<setw(5)<<n -> item.flow<<endl;		n = n -> next;	}	cout<<"Data are saved into the file."<<endl;}