Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
25
Добавлен:
17.04.2013
Размер:
1.58 Кб
Скачать
#include"list.h"
#include<stdio.h>
#include<stdlib.h>

void New(element* &head, element* &tail, int c)
{
	head=new element;
	head->info=c;
	head->next=NULL;
	tail=head;
}

void Add(element* &tail, int c)
{
	element *T;

	T=new element;
	T->info=c;
	T->next=NULL;
	tail->next=T;
	tail=T;
}

list::list(int n, int a, int b)
{
	if (n>0)
	{
		New(head,tail,random(b-a+1)+a);
		for(int i=1;i<=n-1;i++)
			Add(tail,random(b-a+1)+a);
		num=n;
	}
	else
		num=0;
}

list::list(list &L)
{
	element *T;

	T=L.head;
	New(head,tail,T->info);
	num=1;
	while (T!=L.tail)
	{
		num++;
		T=T->next;
		Add(tail,T->info);
	}
}

list::~list()
{
	delete head;
	delete tail;
	num=0;
}

void list::print()
{
	element *T;

	T=head;
	printf("%3d ",T->info);
	while (T!=tail)
	{
		T=T->next;
		printf("%3d ",T->info);
	}
}

int list::del(int n)
{
	if (n<=num)
	{
		int i;
		element *T;

		T=head;
		if (n==1)
			head=head->next;
		else if (n==num)
		{
			for (i=1;i<=num-2;i++)
				T=T->next;
			T->next=NULL;
			tail=T;
		}
		else
		{
			for (i=1;i<=n-2;i++)
				T=T->next;
			T->next=T->next->next;
		}
		num--;
		return num;
	}
	else
		return -1;
}

list list::operator &(list &L)
{
	element *P1, *P2;

	head->info=(head->info>L.head->info)?head->info:L.head->info;
	int n=(num<L.num)?num:L.num;

	if (n>1)
	{
		P1=head;
		P2=L.head;
		for (int i=1;i<=n-1;i++)
		{
			P1=P1->next;
			P2=P2->next;
			P1->info=(P1->info>P2->info)?P1->info:P2->info;
		}
	}
	tail=P1;
	return *this;
}
Соседние файлы в папке Var06