#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NR_NOTE 10
struct Elem {
char nota;
struct Elem* next; // adresa elementului urmator
};
typedef struct Elem Node;
void addAtBeginning(Node** head, char v) {
Node
*newNode
= (Node
*)malloc(sizeof(Node
)); newNode->nota = v;
newNode->next = *head;
*head = newNode;
}
void addAtEnd(Node** head, char v) {
Node *aux = *head;
Node
*newNode
= (Node
*)malloc(sizeof(Node
)); newNode->nota = v;
if (*head == NULL)
addAtBeginning(&*head, v);
else {
while (aux->next != NULL)
aux = aux->next;
aux->next = newNode;
newNode->next = NULL;
}
}
void print(Node* head) {
while (head != NULL) {
head = head->next;
}
}
Node* cautareSecventa(Node* head, char secventa[]) {
Node *iter;
iter = head;
if (iter != NULL) { //parcurgere lista
while (iter->next != NULL) {
if (iter->nota == secventa[0] && iter->next->nota == secventa[1]) {
Node *iter2 = iter->next->next; //parcurgere pentru gasirea ultimei note
while (iter2->next != NULL) {
if (iter2->nota == secventa[2]) {
return iter;
}
iter2 = iter2->next;
}
}
iter = iter->next;
}
}
return NULL;
}
void adaugareRefren(Node** head, Node* headRefren, char endRefren) {
Node *iter;
for (int i = 0; i < 2; i++) {
iter = headRefren;
if (iter != NULL) {
while (iter->next != NULL) {
addAtEnd(head, iter->nota);
if (iter->nota == endRefren) {
break;
}
iter = iter->next;
}
}
}
}
void eliberareMem(Node** head) {
Node *headcopy;
while (*head!=NULL) {
headcopy = (*head)->next;
*head = headcopy;
}
*head=NULL;
}
int main() {
//Subpunctul a
char v[] = {'D', 'D', 'G', 'G', 'A', 'F', 'C', 'D', 'F', 'C'};
int i;
Node *CapLista = NULL;
for (i = NR_NOTE - 1; i >= 0; i--) {
addAtBeginning(&CapLista, v[i]);
}
print(CapLista);
//Subpunctul b
char s[] = {'G','A','D'};
Node *Refren = cautareSecventa(CapLista, s);
if (Refren != NULL) {
//Subpunctul c
adaugareRefren(&CapLista, Refren, s[2]);
print(CapLista);
} else printf("Nu exista secventa \n");
eliberareMem(&CapLista);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojZGVmaW5lIE5SX05PVEUgMTAKCnN0cnVjdCBFbGVtIHsKCWNoYXIgbm90YTsKCXN0cnVjdCBFbGVtKiBuZXh0OyAgIC8vIGFkcmVzYSBlbGVtZW50dWx1aSB1cm1hdG9yCn07Cgp0eXBlZGVmIHN0cnVjdCBFbGVtIE5vZGU7Cgp2b2lkIGFkZEF0QmVnaW5uaW5nKE5vZGUqKiBoZWFkLCBjaGFyIHYpIHsKICAgIE5vZGUgKm5ld05vZGUgPSAoTm9kZSopbWFsbG9jKHNpemVvZihOb2RlKSk7CgluZXdOb2RlLT5ub3RhID0gdjsKCW5ld05vZGUtPm5leHQgPSAqaGVhZDsKCSpoZWFkID0gbmV3Tm9kZTsKfQoKdm9pZCBhZGRBdEVuZChOb2RlKiogaGVhZCwgY2hhciB2KSB7CiAgICBOb2RlICphdXggPSAqaGVhZDsKICAgIE5vZGUgKm5ld05vZGUgPSAoTm9kZSopbWFsbG9jKHNpemVvZihOb2RlKSk7CiAgICBuZXdOb2RlLT5ub3RhID0gdjsKCiAgICBpZiAoKmhlYWQgPT0gTlVMTCkgCiAgICAgICAgYWRkQXRCZWdpbm5pbmcoJipoZWFkLCB2KTsKICAgIGVsc2UgewogICAgICAgIHdoaWxlIChhdXgtPm5leHQgIT0gTlVMTCkgCiAgICAgICAgICAgIGF1eCA9IGF1eC0+bmV4dDsKICAgICAgICBhdXgtPm5leHQgPSBuZXdOb2RlOwogICAgICAgIG5ld05vZGUtPm5leHQgPSBOVUxMOwogICAgfQp9Cgp2b2lkIHByaW50KE5vZGUqIGhlYWQpIHsgCiAgICB3aGlsZSAoaGVhZCAhPSBOVUxMKSB7CiAgICAgICAgcHJpbnRmKCIlYyAiLCBoZWFkLT5ub3RhKTsKICAgICAgICBoZWFkID0gaGVhZC0+bmV4dDsKICAgIH0KfQoKTm9kZSogY2F1dGFyZVNlY3ZlbnRhKE5vZGUqIGhlYWQsIGNoYXIgc2VjdmVudGFbXSkgewogICAgTm9kZSAqaXRlcjsKICAgIGl0ZXIgPSBoZWFkOwogICAgaWYgKGl0ZXIgIT0gTlVMTCkgeyAgLy9wYXJjdXJnZXJlIGxpc3RhICAgICAgCiAgICAgICAgd2hpbGUgKGl0ZXItPm5leHQgIT0gTlVMTCkgewogICAgICAgICAgICBpZiAoaXRlci0+bm90YSA9PSBzZWN2ZW50YVswXSAmJiBpdGVyLT5uZXh0LT5ub3RhID09IHNlY3ZlbnRhWzFdKSB7CiAgICAgICAgICAgICAgICBOb2RlICppdGVyMiA9IGl0ZXItPm5leHQtPm5leHQ7IC8vcGFyY3VyZ2VyZSBwZW50cnUgZ2FzaXJlYSB1bHRpbWVpIG5vdGUKICAgICAgICAgICAgICAgIHdoaWxlIChpdGVyMi0+bmV4dCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIyLT5ub3RhID09IHNlY3ZlbnRhWzJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVyOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpdGVyMiA9IGl0ZXIyLT5uZXh0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGl0ZXIgPSBpdGVyLT5uZXh0OyAgICAgICAgIAogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBOVUxMOwp9Cgp2b2lkIGFkYXVnYXJlUmVmcmVuKE5vZGUqKiBoZWFkLCBOb2RlKiBoZWFkUmVmcmVuLCBjaGFyIGVuZFJlZnJlbikgewogICAgTm9kZSAqaXRlcjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAgICBpdGVyID0gaGVhZFJlZnJlbjsKICAgIGlmIChpdGVyICE9IE5VTEwpIHsgCiAgICAgICAgd2hpbGUgKGl0ZXItPm5leHQgIT0gTlVMTCkgeyAgIAogICAgICAgICAgICBhZGRBdEVuZChoZWFkLCBpdGVyLT5ub3RhKTsKICAgICAgICAgICAgaWYgKGl0ZXItPm5vdGEgPT0gZW5kUmVmcmVuKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpdGVyID0gaXRlci0+bmV4dDsgICAgICAgICAKICAgICAgICB9CiAgICB9CiAgICB9Cn0KCnZvaWQgZWxpYmVyYXJlTWVtKE5vZGUqKiBoZWFkKSB7CiAgICBOb2RlICpoZWFkY29weTsKICAgIHdoaWxlICgqaGVhZCE9TlVMTCkgewogICAgICAgIGhlYWRjb3B5ID0gKCpoZWFkKS0+bmV4dDsKICAgICAgICBmcmVlKCpoZWFkKTsKICAgICAgICAqaGVhZCA9IGhlYWRjb3B5OwogICAgfQogICAgKmhlYWQ9TlVMTDsKfQoKaW50IG1haW4oKSB7CgogICAgLy9TdWJwdW5jdHVsIGEKICAgIGNoYXIgdltdID0geydEJywgJ0QnLCAnRycsICdHJywgJ0EnLCAnRicsICdDJywgJ0QnLCAnRicsICdDJ307CiAgICBpbnQgaTsKICAgIE5vZGUgKkNhcExpc3RhID0gTlVMTDsKICAgIGZvciAoaSA9IE5SX05PVEUgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIGFkZEF0QmVnaW5uaW5nKCZDYXBMaXN0YSwgdltpXSk7CiAgICB9CiAgICBwcmludChDYXBMaXN0YSk7CiAgICBwcmludGYoIlxuIik7CgogICAgLy9TdWJwdW5jdHVsIGIKICAgIGNoYXIgc1tdID0geydHJywnQScsJ0QnfTsKICAgIE5vZGUgKlJlZnJlbiA9IGNhdXRhcmVTZWN2ZW50YShDYXBMaXN0YSwgcyk7CiAgICBpZiAoUmVmcmVuICE9IE5VTEwpIHsKICAgICAgICAvL1N1YnB1bmN0dWwgYyAKICAgICAgICBhZGF1Z2FyZVJlZnJlbigmQ2FwTGlzdGEsIFJlZnJlbiwgc1syXSk7CiAgICAgICAgcHJpbnQoQ2FwTGlzdGEpOwogICAgICAgIHByaW50ZigiXG4iKTsKICAgIH0gZWxzZSBwcmludGYoIk51IGV4aXN0YSBzZWN2ZW50YSBcbiIpOwoKICAgIGVsaWJlcmFyZU1lbSgmQ2FwTGlzdGEpOwogICAgcmV0dXJuIDA7Cn0=