Download as pdf or txt
Download as pdf or txt
You are on page 1of 3

Liste circulare

List circular simplu nlnuit


# include <stdio.h> # include <stdlib.h> struct node{ int data; struct node *link; };

struct node *insert(struct node *p , int n){ struct node *temp; if(p==NULL) { p=(struct node *)malloc(sizeof(struct node)); if(p==NULL) { printf("Eroare la initializarea listei\n"); exit(0); } p-> data = n; p-> link = p; // autoreferire - primul nod al listei } else { temp = p; while (temp-> link != p) temp = temp-> link; temp-> link = (struct node *)malloc(sizeof(struct node)); if(temp -> link == NULL) { printf("Eroare la alocarea unui nod\n"); exit(0); } temp = temp-> link; temp-> data = n; temp-> link = p; // ultimul nod puncteaza spre capul listei } return (p); }

void printlist ( struct node *p ) { struct node *temp; temp = p; printf("Valorile inregistrate in lista:\n"); if (p!= NULL) { do { printf("%d\t",temp-> data); temp=temp->link; }while(temp!=p);

} else printf("Lista nu are elemente\n"); }

void main() { int num; int value; struct node *start = NULL ; printf("Introduceti numarul nodurilor: "); scanf("%d",&num); printf("Introduceti cele %d valori plasate in nodurile listei:\n",num); while ( num-- > 0 ) { scanf("%d",&value); start = insert ( start , value ); } printlist ( start );

printf("\n\n"); system("PAUSE"); }

Buffer circular
// un exemplu de buffer circular #include <stdio.h> #include <string.h> #define BUFFER_SIZE 48 #define ERROR_CHAR (-1)

void buffer_char(char c); char unbuffer_char(void);

// scrie in buffer // citire din buffer

// buffer circular char circular_buffer[BUFFER_SIZE]; // indicatori pt pozitionarea in buffer int start, end; int main(int argc, char *argv[]) { char message[] = {"Acest sir de caractere este utilizat doar pentru " "a demonstra functionarea bufferului circular."}; int i; // adauga in buffer for (i = 0; i < strlen(message); i++) { buffer_char(message[i]); }

// citeste continutul bufferului pana la ultimul element while(start != end) { printf("%c", unbuffer_char()); } printf("\n\n"); system("PAUSE"); return 0; } void buffer_char(char c) { // daca exista pozitie libera in buffer if ((end + 1) % BUFFER_SIZE != start) { circular_buffer[end] = c; end = (end + 1) % BUFFER_SIZE; } // altfel (cand bufferul este plin) // nu face nimic; ar trebui returnat un cod de eroare } char unbuffer_char(void) { if (end != start) { char temp = circular_buffer[start]; start = (start + 1) % BUFFER_SIZE; return(temp); } // daca bufferul este gol, returneaza un cod de eroare return ERROR_CHAR; }

You might also like