Files
2026-03-05 13:44:23 +01:00

243 lines
6.1 KiB
C++

/***************************************************/
/* IMPLEMENTERINGSFIL FVR LAB 0 I PUMA */
/***************************************************/
#include "lab_0.h"
struct listNode
{
listItemType listContent;
ptrType next;
};
/***************************************************/
/*SDTTER LISTSTORLEKEN TILL NOLL */
/***************************************************/
listClass::listClass():size(0), head(NULL)
{
}
listClass::listClass(const listClass &L):
size(L.size)
{
if (L.head == NULL)
head = NULL;
else
{
head = new listNode;
assert(head != NULL);
head ->listContent = L.head -> listContent;
ptrType newPrev = head;
for (ptrType origCur = L.head -> next ; origCur != NULL ; origCur = origCur -> next)
{
newPrev -> next = new listNode;
assert(newPrev -> next != NULL);
newPrev = newPrev -> next;
newPrev -> listContent = origCur -> listContent;
}
}
}
/***************************************************/
/*GVR INGET, MEN MEN ANROPAS NDR LISTAN DVR */
/***************************************************/
listClass::~listClass()
{
}
/***************************************************/
/*KOLLAR OM LISTAN DR TOM */
/***************************************************/
int listClass::listIsEmpty()
{
return int (size == 0);
}
int listClass::listLength()
{
return size;
}
ptrType listClass::ptrTo(int position)
{
if ((position < 1) || (position > listLength()))
return NULL;
else
{
ptrType trav = head;
for (int skip = 1 ; skip < position ; skip++)
trav = trav -> next;
return trav;
}
}
/***************************************************/
/*LDGGER TILL ETT NYTT ELEMENT I LISTAN */
/*precondition: att listelementet dr ett heltal*/
/* precondition: att listelementet inte finns */
/* postcondition: listan har ett nytt element */
/***************************************************/
void listClass::listInsert(listItemType newItem)
{
int newPosition=1;
int newLength = listLength() + 1;
{
size = newLength;
ptrType newPtr = new listNode;
if (int(newPtr != NULL))
{
newPtr -> listContent = newItem;
if(newPosition == 1)
{
newPtr ->next = head;
head = newPtr;
}
else
{
ptrType prev = ptrTo(newPosition-1);
newPtr -> next = prev -> next;
prev -> next = newPtr;
}
}
}
}
/***************************************************/
/*TAR BORT ELEMENT I LISTAN */
/*precondition: att positionen finns */
/* precondition: att positionen dr ett heltal */
/* precondition*: att positionen >0 */
/*postcondition: elementet har tagits bort */
/***************************************************/
void listClass::listDel(listItemType position)
{
ptrType cur;
if ((position >=1) && (position <= listLength()))
{
size--;
if (position == 1)
{
cur = head;
head = head -> next;
}
else
{
ptrType prev = ptrTo(position-1);
cur = prev -> next;
prev -> next = cur ->next;
}
cur -> next = NULL;
delete cur;
cur = NULL;
}
}
/***************************************************/
/*SKRIVER UT LISTAN PE SKDRMEN */
/*precondition: TRUE */
/*postcondition: listan har skrivits ut */
/***************************************************/
void listClass::listDisplay()
{
cout << "Elementen dr: \n";
for(ptrType cur = head ; cur != NULL ; cur = cur->next)
cout << cur->listContent << endl;
getch();
}
/***************************************************/
/*SORTERAR LISTAN */
/*precondition: TRUE */
/*postcondition: elementen ligger i ordning */
/***************************************************/
void listClass::listSort()
{
listItemType temp;
int bytt;
do
{
bytt=FALSE;
for(ptrType cur=head ; cur->next != NULL ; cur = cur->next)
if(cur->listContent > cur->next->listContent)
{
temp = cur->listContent;
cur->listContent = cur->next->listContent;
cur->next->listContent = temp;
bytt=TRUE;
}
}while(bytt);
}
/***************************************************/
/*SVKER EFTER ETT ELEMENT I LISTAN */
/* precondition: att svkta vdrdet dr ett heltal */
/***************************************************/
void listClass::listSeek(listItemType soktVarde)
{
ptrType cur;
for(cur=head ; cur != NULL ; cur = cur->next)
if(cur->listContent == soktVarde)
{
cout <<"Elementet fanns med!";
getch();
return;
}
cout <<"Sorry, det fanns inte...";
getch();
}
/***************************************************/
/*KOLLAR OM ETT ELEMENT FINNS */
/*precondition: att elementet dr ett heltal */
/*postcondition: returnerar FALSE om ej finns */
/***************************************************/
int listClass::newDuplicate(newItem)
{
ptrType cur;
for(cur=head ; cur != NULL ; cur = cur->next)
if(cur->listContent == newItem)
return TRUE;
return FALSE;
}
/***************************************************/
/*KONTROLLERAR OM DET FINNS ELEMENT I LISTAN */
/*precondition: TRUE */
/***************************************************/
void listClass::listIsItEmpty()
{
if(head == NULL)
cout <<"Listan dr tom..." << endl;
else
cout <<"Det finns element i listan...";
getch();
}
/***************************************************/
/*VISAR ANTALET ELEMENT I LISTAN */
/*precondition: TRUE */
/***************************************************/
void listClass::listAntal()
{
cout <<"Det finns " << size << " element i listan.";
getch();
}
/***************************************************/
/*KONTROLLERAR OM EN POSITION FINNS */
/*precondition: att positionen dr ett heltal */
/***************************************************/
int listClass::posIsOk(int position)
{
if((position <= size) && (position > 0))
return TRUE;
else
return FALSE;
}