#include <stdio.h>
#include <stdlib.h>
struct node {
int item;
struct node *nextPtr;
};
typedef struct node node;
typedef node *nodePtr;
nodePtr headPtr,currentPtr,newPtr,prevPtr,tempPtr;
void instruction();
void initialize(nodePtr *headPtr);
void insertNode2(nodePtr *headPtr);
void printList(nodePtr *headPtr);
void randomList(nodePtr *headPtr);
void searchNode(nodePtr *headPtr);
void deleteNode(nodePtr *headPtr);
void invertList(nodePtr *headPtr);
void sortList(nodePtr *headPtr);
void addHead(nodePtr *headPtr);
void addTail(nodePtr *headPtr);
void insertInOrder(nodePtr *headPtr);
int main(void)
{
initialize(&headPtr);
instruction();
system(“PAUSE”);
return 0;
}
void initialize(nodePtr *headPtr)
{
*headPtr=NULL;
return;
}
void insertNode(nodePtr *headPtr)
{
int item;
currentPtr=*headPtr;
prevPtr=NULL;
printf(" inserisci il valore\n");
scanf("%d",&item);
while(item!=0)
{
newPtr=malloc(sizeof(node));
if(newPtr==NULL) printf(“non vi e’ memoria disponibile\a\a”);
newPtr->item=item;
newPtr->nextPtr=NULL;
if(prevPtr==NULL) *headPtr=newPtr;
else prevPtr->nextPtr=newPtr;
newPtr->nextPtr=NULL;
prevPtr=newPtr;
printf(" inserisci il valore\n");
scanf("%d",&item);
}
return instruction();
}
void printList(nodePtr *headPtr)
{
currentPtr=*headPtr;
printf("\t LISTA \n “);
if(*headPtr==NULL) printf(“La lista e’ vuota\n\a”);
else
{
while(currentPtr!=NULL)
{
printf(”%d–>",currentPtr->item);
currentPtr=currentPtr->nextPtr;
}
printf(“NULL\n”);
}
return instruction();
}
void randomList(nodePtr *headPtr)
{
int elem,i;
prevPtr=NULL;
printf(“Di quanti elementi deve essere la lista?\n”);
scanf("%d",&elem);
for(i=0;i<elem;i++)
{
newPtr=malloc(sizeof(node));
if(newPtr==NULL) printf(“non vi e’ memoria disponibile\n”);
newPtr->item=rand()%10;
newPtr->nextPtr=NULL;
if(prevPtr==NULL) *headPtr=newPtr;
else prevPtr->nextPtr=newPtr;
prevPtr=newPtr;
}
return instruction();
}
void searchNode(nodePtr *headPtr)
{int wanted,founded=0;
currentPtr=*headPtr;
printf(“Digita l’elemento da cercare\n”);
scanf("%d",&wanted);
while(currentPtr!=NULL)
{
if(currentPtr->item==wanted ) founded+=1;
currentPtr=currentPtr->nextPtr;
}
if (founded!=0)printf(“il %d e’ presente %d volte nella lista\n”,wanted,founded);
else printf(“il %d non e’ presente nella lista\n”,wanted);
return instruction();
}
void deleteNode(nodePtr *headPtr)
{int wanted;
currentPtr=*headPtr;
prevPtr=*headPtr;
printf(“Digita l’elemento da cancellare\n”);
scanf("%d",&wanted);
while(currentPtr!=NULL)
{
if(currentPtr->item==wanted )
{
if(prevPtr==*headPtr)*headPtr=currentPtr->nextPtr;
else prevPtr->nextPtr=currentPtr->nextPtr;
tempPtr=currentPtr;
currentPtr=currentPtr->nextPtr;
free(tempPtr);
}prevPtr=currentPtr;
currentPtr=currentPtr->nextPtr;
}
return instruction();
}
void invertList(nodePtr *headPtr)
{
currentPtr=*headPtr;
prevPtr=NULL;
while(currentPtr!=NULL)
{
tempPtr=currentPtr->nextPtr;
currentPtr->nextPtr=prevPtr;
prevPtr=currentPtr;
currentPtr=tempPtr;
}
*headPtr=prevPtr;
return instruction();
}
void sortList(nodePtr *headPtr)
{int temp,i,j;
tempPtr=*headPtr;
while(tempPtr->nextPtr!=NULL)
{
currentPtr=*headPtr;
while(currentPtr->nextPtr!=NULL)
{
if(currentPtr->item > currentPtr->nextPtr->item)
{
temp=currentPtr->item;
currentPtr->item=currentPtr->nextPtr->item;
currentPtr->nextPtr->item=temp;
}
currentPtr=currentPtr->nextPtr;
}
tempPtr=tempPtr->nextPtr;
}
return instruction();
}
void addHead(nodePtr *headPtr)
{int newNode;
printf(“inserici il numero da inserire in testa\n”);
scanf("%d",&newNode);
newPtr=malloc(sizeof(node));
newPtr->item=newNode;
newPtr->nextPtr=*headPtr;
*headPtr=newPtr;
return instruction();
}
void addTail(nodePtr *headPtr)
{int newNode;
printf(“inserici il numero da inserire in testa\n”);
scanf("%d",&newNode);
currentPtr=*headPtr;
newPtr=malloc(sizeof(node));
newPtr->item=newNode;
newPtr->nextPtr=NULL;
if(currentPtr==NULL) *headPtr=newPtr;
else
{
while(currentPtr->nextPtr!=NULL)
{
currentPtr=currentPtr->nextPtr;
}
currentPtr->nextPtr=newPtr;
}
return instruction();
}
void instruction()
{int value;
printf(“scegli l’istruzione da effettuare\n1. scrivi i valori di una lista\n2. crea una lista aleatoria\n3. stampa una lista\n4. cerca un elemento nella lista\n5. cancella un elemento dalla lista\n6. inverti la lista\n7. ordina la lista\n8. Aggiungi elemento in testa\n9. Aggiungi elemento in coda\n10. Inserisci un numero in ordine\n0. Uscita\n “);
scanf(”%d”,&value);
switch (value)
{
case 0:
break;
case 1: insertNode2(&headPtr);
break;
case 2: randomList(&headPtr);
break;
case 3: printList(&headPtr);
break;
case 4: searchNode(&headPtr);
break;
case 5: deleteNode(&headPtr);
break;
case 6: invertList(&headPtr);
break;