Академический Документы
Профессиональный Документы
Культура Документы
2-----------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
*first=p;
}
p->next=q->next;
q->next=p;
if(q==*last)
{
p->next=NULL;
*last=p;
}
if(*first!=NULL)
{
p=*first;
*first=(*first)->next;
free(p);
while(q!=NULL)
{
if(q->key==givenKey) break;
q1=q;
q=q->next;
}
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~`vector~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
int search_vector(int *arr, int size, int key)
{
for(int i=0; i<size; i++)
if(arr[i]==key)
{
return i;
}
}
arr[0]=key;
(*size)++;
arr[*size-1]=key;
}
int main()
{
NodeT *first;
NodeT *last;
first=NULL;
last=NULL;
insert_first(&first,&last,4);
insert_first(&first,&last,1);
insert_last(&first,&last,3);
insert_after_key(&first,&last,4,22);
insert_after_key(&first,&last,3,25);
// afisarea listei
afisare(first);
NodeT *test_false=search(first,2);
printf("%d\n",test_false);
NodeT *test_true=search(first,3);
printf("%d\n",test_true);
delete_first(&first,&last);
delete_last(&first,&last);
delete_key(&first,&last,22);
delete_key(&first,&last,8);
afisare(first);
//////////////////////////////////////////////
int *v=(int*)calloc(10,sizeof(int));
int size=0;
/*for(int i=0;i<size;i++)
{printf("v[%d]=",i);
scanf("%d",&v[i]);
printf("\n");}*/
int capacity=10;
insert_first_vector(v,&size,&capacity,5);
insert_first_vector(v,&size,&capacity,2);
insert_first_vector(v,&size,&capacity,7);
insert_last_vector(v,&size,&capacity,12);
insert_last_vector(v,&size,&capacity,13);
afisare_vector(v,size);
printf("%d este indexul cheii 2\n",search_vector(v,size,2));
printf("%d este indexul cheii 20\n",search_vector(v,size,20));
delete_first_vector(v,&size);
delete_key_vector(v,&size,12);
afisare_vector(v,size);
}
--------------------------------Lab 3 --------------------------------------
~~~~~~~~~~~~~~~~~stiva~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include <stdio.h>
#include <stdlib.h>
return p;
}
if(*stack==NULL)
*stack=p;
else
{
p->next=*stack;
*stack=p;
}
}
if((*stack)->next==NULL)
*stack=NULL;
else
*stack=(*stack)->next;
return p;
while(p!=NULL)
{
printf("%d ",p->key);
p=p->next;
}
printf("\n");
}
int main()
{
NodeT *stack;
stack=init(1);
push(&stack,5);
push(&stack,6);
push(&stack,7);
afisare(stack);
NodeT *nod_sters=pop(&stack);
printf("Nodul sters este %d\n",nod_sters->key);
push(&stack,100);
afisare(stack);
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~`lista ddublu inlantuita
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include <stdio.h>
#include <stdlib.h>
struct list_header
{
NodeDL *first;
NodeDL *last;
};
if(L->first==NULL)
L->first=L->last=p;
else
{
p->next=L->first;
L->first->prev=p;
L->first=p;
}
}
if(L->last==NULL)
L->first=L->last=p;
else
{
p->prev=L->last;
L->last->next=p;
L->last=p;
}
}
if(q->key==afterKey)
{
NodeDL *p=(NodeDL*)malloc(sizeof(NodeDL));
p->key=givenKey;
p->next=NULL;
p->prev=NULL;
if(q->next==NULL)
{
p->prev=q;
p->next=NULL;
q->next=p;
L->last=p;
}
else
{
p->prev=q;
p->next=q->next;
(q->next)->prev=p;
q->next=p;
}
}
}
if(L->first!=NULL)
{
if(L->first->next!=NULL)
{
(L->first)->next->prev=NULL;
L->first=L->first->next;
//free(q);
}
else
L->first=L->first->next=NULL;
free(q); // am adus free(q) de sus, aici :)) mergea si inainte
//if(L->first==NULL)
//L->last=NULL;
}
else
{
printf("Lista este deja goala !\n");
}
}
while(q!=NULL)
{
if(q->key == givenKey)
break;
q=q->next;
}
if(L->first!=NULL)
if(q->next==NULL && q->prev==NULL)
{
L->first=L->last=NULL;
free(q);
}
else
{
if(q->next==NULL)
{
(q->prev)->next=NULL;
L->last=L->last->prev;
free(q);
}
else
{
(q->prev)->next=q->next;
(q->next)->prev=q->prev;
free(q);
}
}
else
printf("Lista este deja goala!\n");
}
int main()
{
struct list_header L= {NULL,NULL};
//NodeDL *test_false=search(L,10);
//NodeDL *test_true=search(L,4);
//insert_first(&L,4);
//insert_first(&L,3);
//print_forward(L);
//insert_first(&L,2);
//insert_first(&L,1);
//insert_last(&L,10);
//print_backward(L);
/*insert_after_key(&L,4,100);
insert_last(&L,10);
insert_last(&L,20);
insert_first(&L,3);
insert_after_key(&L,3,500);
insert_after_key(&L,20,1000);
insert_last(&L,15);
delete_first(&L);
delete_first(&L);
insert_first(&L,99);
insert_after_key(&L,99,40);
delete_last(&L);
delete_first(&L);
insert_first(&L,99);
insert_after_key(&L,99,40);
delete_first(&L);
delete_last(&L);
insert_last(&L,9999);
print_forward(L);
print_backward(L);
delete_key(&L,100);
print_forward(L);
print_backward(L);
delete_key(&L,9999);
print_forward(L);
print_backward(L);
insert_last(&L,9999);
insert_last(&L,99999);
delete_key(&L,4);
insert_first(&L,99);
insert_after_key(&L,99,40);*/
delete_key(&L,4);
print_forward(L);
print_backward(L);
}
~~~~~~~~~~~~~~~~~~~~`coada cu vector ~~~~~~~~~~~~~~~~~~~~~~~~~~~~``
#include <stdio.h>
#include <stdlib.h>
struct queue
{
int *v;
int head,tail;
int capacity;
};
if(my_queue->tail==my_queue->capacity-1)
my_queue->tail=0;
else
my_queue->tail++;
}
int main()
{
struct queue my_queue;
int capacity=8;
init(&my_queue,capacity);
enqueue(&my_queue,1);
afisare(&my_queue);
enqueue(&my_queue,2);
afisare(&my_queue);
enqueue(&my_queue,3);
afisare(&my_queue);
enqueue(&my_queue,4);
afisare(&my_queue);
enqueue(&my_queue,5);
afisare(&my_queue);
enqueue(&my_queue,6);
afisare(&my_queue);
enqueue(&my_queue,7);
afisare(&my_queue);
enqueue(&my_queue,8);
int a=dequeue(&my_queue);
a=dequeue(&my_queue);
a=dequeue(&my_queue);
a=dequeue(&my_queue);
a=dequeue(&my_queue);
a=dequeue(&my_queue);
a=dequeue(&my_queue);
afisare(&my_queue);
/*enqueue(&my_queue,1);
afisare(&my_queue);
int a=dequeue(&my_queue);
enqueue(&my_queue,2);
afisare(&my_queue);
enqueue(&my_queue,3);
afisare(&my_queue);
enqueue(&my_queue,4);
afisare(&my_queue);
enqueue(&my_queue,5);
afisare(&my_queue);
a=dequeue(&my_queue);
a=dequeue(&my_queue);
enqueue(&my_queue,6);
afisare(&my_queue);
enqueue(&my_queue,7);
afisare(&my_queue);
enqueue(&my_queue,8);
afisare(&my_queue);
enqueue(&my_queue,9);
afisare(&my_queue);
enqueue(&my_queue,10);
afisare(&my_queue);
enqueue(&my_queue,11);
a=dequeue(&my_queue);
a=dequeue(&my_queue);
a=dequeue(&my_queue);
a=dequeue(&my_queue);
a=dequeue(&my_queue);
a=dequeue(&my_queue);
a=dequeue(&my_queue);
//a=dequeue(&my_queue);
afisare(&my_queue);
// dupa aceasta operatie, coada mea este goala deja, si daca mai incerc sa
sterg un element, ar trebui sa apara UN MESAJ DE EROARE !!!
a=dequeue(&my_queue);
afisare(&my_queue);*/
//afisare(&my_queue);
}
---------------------------lab4----------------------------------arbore binar
----------------1 7 2 0 5 0 0 0 9 3 0 0 4 0 6 0 0
#include <stdio.h>
#include <stdlib.h>
typedef struct binary_tree
{
int key;
struct binary_tree *left;
struct binary_tree *right;
} NodeT;
fscanf(f,"%d",&val);
if(val==0)
{
return NULL; // daca prima valoare din fisierul text e 0 => radacina
e 0 => nu avem arbore/subarbore (folosim recursivity)
}
else
{
p=(NodeT*)malloc(sizeof(NodeT));
p->key=val;
p->left=CreateBinTreeFromFile(f);
p->right=CreateBinTreeFromFile(f);
//return p; putem pune linistit si aici returnp, e totuna :))
}
return p;
}
if(finder_left->key==givenKey)
return finder_left;
else
{
NodeT *aux_2;
aux_2=p->right;
NodeT *finder_right;
finder_right=finderright(aux_2,givenKey);
return finder_right;
}
/*if(p==NULL)
return 0;
else if(p->key==givenKey) //
recursivitate, m-o ajutat marcusucu tucu-i capu lui
return p;
else
return(Compare(search(p->left,givenKey),search(p->right,givenKey)));*/
}
NodeT *dr=(NodeT*)malloc(sizeof(NodeT));
dr=p->right;
int h_dr=inaltime_arbore(dr);
int diametru_1=h_st+h_dr+2;
int main()
{
FILE *f=fopen("ArboreBinar.txt","r");
if(feof(f))
{
printf("Can't open the file");
return -1;
}
NodeT *root;
root=CreateBinTreeFromFile(f); // creez
arborele folosind datele din fisierul text
NodeT *nod_cautat=search_eficient(root,1);
printf("Inaltimea nodului cautat este %d\n",inaltime_arbore(nod_cautat));
nod_cautat=search_eficient(root,12);
printf("Inaltimea nodului cautat este %d\n",inaltime_arbore(nod_cautat));
nod_cautat=search_eficient(root,4);
printf("Inaltimea nodului cautat este %d\n",inaltime_arbore(nod_cautat));
NodeT *test=search_eficient(root,4);
printf("Inaltimea nodului cautat este %d\n",test->key);
----------------------lab 5
-----------------------------------------------------------arbore binar de cautare
--------------
#include <stdio.h>
#include <stdlib.h>
return p;
}
if(givenKey<root->key)
root->left=insertNode(root->left,givenKey);
else if(givenKey>root->key)
root->right=insertNode(root->right,givenKey);
if(givenKey<root->key)
return search(root->left,givenKey);
return search(root->right,givenKey);
}
while(current->left!=NULL)
current=current->left;
return current;
}
NodeT *findMax(NodeT *node)
{
NodeT *current;
current=node;
while(current->right!=NULL)
current=current->right;
return current;
}
NodeT *succesor=(NodeT*)malloc(sizeof(NodeT));
succesor=NULL;
while(root!=NULL)
{
if(root->key>p->key)
{
succesor=root;
root=root->left;
}
else
root=root->right;
}
return succesor;
if(givenKey<root->key)
root->left=delNode(root->left,givenKey);
else if(givenKey>root->key)
root->right=delNode(root->right,givenKey);
else
{
NodeT *p;
}
return root;
}
int main()
{
//ex1
int level=0;
NodeT *root;
root=NULL;
root=insert_nerecursiv(root,15);
insert_nerecursiv(root,6);
insert_nerecursiv(root,18);
insert_nerecursiv(root,20);
insert_nerecursiv(root,17);
insert_nerecursiv(root,7);
insert_nerecursiv(root,13);
insert_nerecursiv(root,3);
insert_nerecursiv(root,2);
insert_nerecursiv(root,4);
insert_nerecursiv(root,9);
printf("Parcurgerea in preordine: \n");
preorder(root,level);
printf("\n");
printf("Parcurgerea in inordine: \n");
inorder(root,level);
printf("\n");
printf("Parcurgerea in postordine: \n");
postorder(root,level);
printf("\n");
NodeT *p=search(root,15);
printf("%d este cheia nodului care a fost cautat !\n",p->key);
NodeT *min=findMin(p);
printf("%d este nodul cu valoarea minima pentru subarborele cu radacina
%d !\n",min->key,p->key);
NodeT *max=findMax(p);
printf("%d este nodul cu valoarea maxima pentru subarborele cu radacina
%d !\n",max->key,p->key);
NodeT *node=p;
NodeT *succesor = find_succesor(root,node);
printf("%d este succesorul nodului %d !\n",succesor->key,node->key);
NodeT *nod_sters=delNode(root,4);
printf("Nodul care a fost sters este: %d\n",nod_sters->key);
preorder(root,level);
return 0;
}
------------------------lab 6
-------------------------------------------------------------
~~~~~~~~~~~~~chaining~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
#include <stdio.h>
#include <stdlib.h>
#define M 7 //dimensiunea tabelei de dispersie
if(p==NULL)
return 0;
else
return p;
}
if(hTable[i]==NULL)
{
hTable[i]=p;
}
else
{
NodeT *q=hTable[i];
/*while(q->next!=NULL)
q=q->next;
q->next=p;
p->prev=q; */
p->next=q;
q->prev=p;
hTable[i]=p; //// acasa am inserat la final ca un tampit ...
}
}
NodeT *p;
p = hTable[i];
while (p != NULL)
{
printf(" %d ",p->val);
p = p->next;
}
}
printf("\n");
}
printf("\n");
}
int main()
{
// tabela de dispersie
NodeT* hTable[M]; //// toata diferenta e ca, in loc de o singura lista,
avem UN VECTOR DE LISTE(7 LISTE)
int i,n,x;
//initializam tabelul nostru de dispersie
for(i = 0; i < M; i++)
{
hTable[i] = NULL; //// hTable ar fi ca un fel de first, deci il punem
NULL la fiecare lista pt inceput
}
return 0;
}
}
}
if (hash_table_occupied(T, m))
{
printf("Nu se mai poate insera cheia %d, tabela este plina \n", k);
return;
}
int i = 0;
int collision = 1;
int h = 0;
do
{
h = linear_probing(k, m, i);
if (T[h].status == FREE)
collision = 0;
else i++;
}
while (collision);
T[h].status = OCCUPIED;
T[h].val = k;
}
if (hash_table_occupied(T, m))
{
printf("Nu se mai poate insera cheia %d, tabela este plina \n", k);
return;
}
do
{
poz = quadratic_probing(k,m,i);
i++;
if(T[poz].status==FREE)
colision = 0;
}
while(colision);
T[poz].val=k;
T[poz].status=OCCUPIED;
}
if(hash_table_occupied(T,m)==1)
{
printf("Tabelul este plin! \n");
return;
}
do
{
poz = double_hashing(k,m,i);
i++;
if(T[poz].status==FREE)
colision=0;
}
while(colision);
T[poz].val=k;
T[poz].status=OCCUPIED;
}
int main()
{
int m = 7;
Cell *T = (Cell*) malloc(m*sizeof(Cell)); //tabela de dispersie - se aloca
set_table_free(T, m);
afisare(T, m);
insert_linear_probing(19, T, m);
insert_linear_probing(36, T, m);
insert_linear_probing(5, T, m);
insert_linear_probing(21, T, m);
insert_linear_probing(4, T, m);
insert_linear_probing(26, T, m);
insert_linear_probing(14, T, m);
insert_linear_probing(17, T, m);
afisare(T, m);
//resetam tabela
set_table_free(T, m);
afisare(T, m);
insert_quadratic_probing(19, T, m);
insert_quadratic_probing(36, T, m);
insert_quadratic_probing(5, T, m);
insert_quadratic_probing(21, T, m);
insert_quadratic_probing(4, T, m);
insert_quadratic_probing(26, T, m);
insert_quadratic_probing(14, T, m);
insert_quadratic_probing(17, T, m);
afisare(T, m);
//resetam tabela
set_table_free(T, m);
afisare(T, m);
insert_double_hashing(19, T, m);
insert_double_hashing(36, T, m);
insert_double_hashing(5, T, m);
insert_double_hashing(21, T, m);
insert_double_hashing(4, T, m);
insert_double_hashing(26, T, m);
insert_double_hashing(14, T, m);
insert_double_hashing(17, T, m);
afisare(T, m);
free(T);
return 0;
}