Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- struct Node
- {
- char Data[30]; /*la parola più lunga in italiano è di 29 lettere*/
- int Number;
- struct Node *Next;
- };
- int length(struct Node* Head)
- {
- struct Node *cur_ptr;
- int count=0;
- cur_ptr=Head;
- while(cur_ptr != NULL)
- {
- cur_ptr=cur_ptr->Next;
- count++;
- }
- return count;
- }
- struct Node* addBeg(struct Node* Head, char* num, int tel)
- {
- struct Node *temp;
- temp=(struct Node *)malloc(sizeof(struct Node));
- strcpy(temp->Data,num);
- temp->Number=tel;
- if (Head == NULL)
- {
- //List is Empty
- Head=temp;
- Head->Next=NULL;
- }
- else
- {
- temp->Next=Head;
- Head=temp;
- }
- return Head;
- }
- struct Node* addEnd(struct Node *Head,char* num, int tel){
- struct Node *temp1, *temp2;
- if(Head == NULL)
- return addBeg(Head,num,tel);
- temp1=(struct Node *)malloc(sizeof(struct Node));
- strcpy(temp1->Data,num);
- temp1->Number=tel;
- temp2=Head;
- while(temp2->Next != NULL)
- temp2=temp2->Next;
- temp1->Next=NULL;
- temp2->Next=temp1;
- return Head;
- }
- struct Node* addAt(struct Node* Head, char* num, int tel, int loc)
- {
- int i;
- struct Node *temp, *prev_ptr, *cur_ptr;
- cur_ptr=Head;
- if(loc > (length(Head)+1) || loc <= 0)
- {
- printf("\nImpossibile aggiungere l'elemento\n ");
- }
- else
- {
- if (loc == 1)
- return addBeg(Head,num,tel);
- if (loc==length(Head)-1)
- return addEnd(Head,num,tel);
- for(i=1;i<loc;i++)
- {
- prev_ptr=cur_ptr;
- cur_ptr=cur_ptr->Next;
- }
- temp=(struct Node *)malloc(sizeof(struct Node));
- strcpy(temp->Data,num);
- temp->Number=tel;
- prev_ptr->Next=temp;
- temp->Next=cur_ptr;
- }
- return Head;
- }
- void display(struct Node * Head)
- {
- struct Node *cur_ptr;
- cur_ptr=Head;
- if(cur_ptr==NULL)
- {
- printf("\nLa rubrica è vuota");
- }
- else
- {
- printf("\nElementi nella Rubrica: ");
- //traverse the entire linked list
- while(cur_ptr!=NULL)
- {
- printf("\n%s - %d",cur_ptr->Data, cur_ptr->Number);
- cur_ptr=cur_ptr->Next;
- }
- printf("\n");
- }
- }
- int SearchPos(struct Node* Head, char* num){
- if (Head==NULL) return 1;
- struct Node* cptr=Head;
- int cont=1;
- while (strcmp(cptr->Data,num)<0){
- cptr=cptr->Next;
- cont++;
- if(cptr==NULL) break;
- }
- return cont;
- }
- char* minuscolo (char* a){
- int i;
- for (i=0;i<strlen(a);i++)
- {
- if (*(a+i)>='A' && *(a+i)<='Z') *(a+i)+=32;
- }
- return a;}
- struct Node* Libera(struct Node* Head){
- struct Node* temp;
- while (Head!=NULL){
- temp=Head->Next;
- free(Head);
- Head=temp;
- }
- return NULL;
- }
- struct Node* TrovaContatto(struct Node* Head, char* num){
- struct Node* cptr=Head;
- while (strcmp(cptr->Data,num)!=0){
- cptr=cptr->Next;
- if (cptr==NULL) break;
- }
- return cptr;
- }
- int main(){
- char input[30];
- int tel;
- int scelta;
- int continua=1;
- struct Node* temp;
- struct Node* Lista=NULL;
- while(continua){
- printf("\nCosa vuoi fare?\n1- Inserire un contatto\n2- Mostrare tutti i contatti\n3- Cercare un contatto\n0- Esci\n");
- scanf("%d",&scelta); fflush(stdin);
- switch (scelta){
- case 0:
- continua=0;
- break;
- case 1:
- printf("\nInserisci il nome: ");
- scanf("%s",input); fflush(stdin);
- minuscolo(input);
- printf("\nInserisci il numero: ");
- scanf("%d",&tel); fflush(stdin);
- Lista=addAt(Lista,input,tel,SearchPos(Lista,input));
- printf("\nContatto Aggiunto");
- break;
- case 2:
- display(Lista);
- break;
- case 3:
- printf("\nInserisci il nome da cercare: ");
- scanf("%s",input); fflush(stdin);
- temp=TrovaContatto(Lista,minuscolo(input));
- if (temp==NULL) printf("\nContatto non trovato");
- else printf("\nContatto trovato\n%s - %d",temp->Data, temp->Number);
- default:
- break;
- }
- printf("\nPremere Invio per Continuare..."); getchar();
- }
- Lista=Libera(Lista);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement