Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабы / C++.Ашарина / !Сделанные / Lab7 / Var06 / List
.cpp#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;
}