Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #define MAX 5
- typedef struct BUFFER {
- int array[MAX];
- int f, r;
- } BUFFER;
- typedef struct node {
- int num;
- struct node *next;
- } NODE;
- int isFull(BUFFER *buffer);
- int isEmpty(BUFFER *buffer);
- int addToBuffer(BUFFER *buffer, int data);
- void options(BUFFER *buffer, NODE **tos);
- int delete(BUFFER *buffer, int *data);
- int writeFromBuffer(BUFFER *buffer);
- void addToStack(NODE **tos, int *num);
- int pop(NODE **tos, int *num);
- void writeFromStack(NODE **tos);
- int main() {
- BUFFER buffer; buffer.f = buffer.r = -1; char c; int num;
- NODE *tos;
- options(&buffer, &tos);
- writeFromStack(&tos);
- writeFromBuffer(&buffer);
- return 0;
- }
- void options(BUFFER *buffer, NODE **tos){
- int o, pom;
- printf("Izaberi operaciju: \nDodavanje novog elementa u bafer [1] \nUklanjanje elementa iz bafera [2] \nIspis svih elemenata iz bafera [0]\n");
- scanf("%d", &o);
- if(o == 1){
- int n;
- printf("Unesite prirodan num\n");
- scanf("%d", &n);
- if(addToBuffer(buffer, n) == 0)
- printf("Bafer je pun.\n");
- else
- addToStack(tos, &n);
- options(buffer, tos);
- } else if (o == 2) {
- int n;
- delete(buffer, &n);
- options(buffer, tos);
- }else if (o == 0) {
- return;
- }else
- printf("Unesena opcija ne postoji.");
- }
- //stack
- void addToStack(NODE **tos, int *num) {
- NODE *new = (NODE *)malloc(sizeof(NODE));
- new->num = *num;
- new->next = *tos;
- *tos = new;
- }
- int pop(NODE **tos, int *num) {
- if (*tos == 0) return 0;
- NODE *p = *tos;
- *num = p->num;
- *tos = p->next;
- free(p);
- return 1;
- }
- void writeFromStack(NODE **tos) {
- int num; int rb = 1;
- while (pop(tos, &num))
- printf("%d. broj: %d\n", rb++, num);
- }
- //buffer
- int addToBuffer(BUFFER *buffer, int data){
- if (isFull(buffer))
- return 0;
- if (buffer->f == -1)
- buffer->f = 0;
- buffer->r = (buffer->r + 1) % MAX;
- buffer->array[buffer->r] = data;
- return 1;
- }
- int delete(BUFFER *buffer, int *data){
- if (isEmpty(buffer))
- return 0;
- *data = buffer->array[buffer->f];
- if (buffer->f == buffer->r)
- buffer->f = buffer->r = -1;
- else
- buffer->f = (buffer->f + 1) % MAX;
- return 1;
- }
- int writeFromBuffer(BUFFER *buffer) {
- if (isEmpty(buffer))
- return 0;
- int i = buffer->f;
- if (buffer->f <= buffer->r){
- while (i <= buffer->r)
- printf("%d ", buffer->array[i++]);
- } else {
- while (i <= MAX - 1)
- printf("%d ", buffer->array[i++]);
- i = 0;
- while (i <= buffer->r)
- printf("%d ", buffer->array[i++]);
- }
- return 1;
- }
- int isFull(BUFFER *buffer) {
- return (buffer->r + 1) % MAX == buffer->f;
- }
- int isEmpty(BUFFER *buffer) {
- return buffer->f == -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement