Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #define true 1
- #define false 0
- typedef unsigned short int bool;
- struct list
- {
- int *buffer;
- int head;
- int tail;
- int size;
- };
- bool createList(struct list *ptr, int size)
- {
- ptr->size = size;
- ptr->buffer = malloc(ptr->size * sizeof(int));
- if (ptr->buffer == NULL)
- {
- return false;
- }
- ptr->head = 0;
- ptr->tail = 0;
- return true;
- }
- bool addElement(struct list *ptr, int value)
- {
- if (ptr->tail + 1 % ptr->size != ptr->head)
- {
- ptr->buffer[ptr->tail] = value;
- ptr->tail = ++ptr->tail % ptr->size;
- return true;
- }
- // Lista piena
- return false;
- }
- bool addElementFirst(struct list *ptr, int value)
- {
- if (ptr->tail + 1 % ptr->size != ptr->head)
- {
- int prec = (ptr->head - 1 + ptr->size) % ptr->size;
- ptr->buffer[prec] = value;
- ptr->head = prec;
- return true;
- }
- //lista piena
- return false;
- }
- bool printLista(struct list *ptr)
- {
- if (ptr->head == ptr->tail)
- {
- printf("Lista vuota \n");
- return false;
- }
- int val = ptr->head;
- while (val != ptr->tail) {
- printf("%d \t", ptr->buffer[val]);
- val = ++val % ptr->size;
- }
- printf("\n");
- return true;
- }
- int ord_insert2(struct list * ptr, int val) {
- if (ptr->head != (++ptr->tail)%ptr->size) {
- int pos = ptr->tail, prec = (pos - 1 + ptr->size) % ptr->size;
- while (!(ptr->buffer[prec] < val || pos == ptr->head)) {
- ptr->buffer[pos] = ptr->buffer[prec];
- pos = prec;
- }
- ptr->buffer[pos] = val;
- return true;
- }
- return false;
- }
- bool ins_ord(struct list *ptr, int value) {
- if (1+ptr->tail % ptr->size == ptr->head) {
- return false;
- }
- int val = ptr->tail;
- ptr->tail = ++ptr->tail % ptr->size;
- while (value < ptr->buffer[(val-1 + ptr->size) % ptr->size] && (val-1 + ptr->size) % ptr->size != ptr->head) {
- ptr->buffer[val] = ptr->buffer[(val-1 + ptr->size) % ptr->size];
- val = (val-1 + ptr->size) % ptr->size;
- }
- ptr->buffer[val] = value;
- }
- bool ord_insert3(struct list * ptr, int val) {
- //if (ptr->tail+1%ptr->size == ptr->head) return false;
- int pos = ptr->tail;
- ptr->tail = ptr->tail +1 % ptr->size;
- if (ptr->buffer[(pos-1+ptr->size) % ptr->size] > val) {
- ptr->buffer[pos] = val;
- return true;
- }
- do {
- int prec = (pos-1+ptr->size) % ptr->size;
- ptr->buffer[pos] = ptr->buffer[prec];
- if (ptr->buffer[prec] > val || prec == ptr->head) {
- ptr->buffer[pos] = val;
- return true;
- }
- pos = prec;
- } while (pos != ptr->head);
- return false;
- }
- int main()
- {
- struct list lista;
- createList(&lista, 30);
- printLista(&lista);
- addElement(&lista, 2);
- addElement(&lista, 4);
- addElement(&lista, 6);
- addElement(&lista, 8);
- addElementFirst(&lista, -1);
- printLista(&lista);
- ord_insert3(&lista, -2);
- printLista(&lista);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement