Моето решение на задачата за превръщане на едно число от десетично в двоично, като използваме опашка

20 views
Skip to first unread message

Puh Puhalev

unread,
Jun 22, 2013, 8:06:19 AM6/22/13
to prog1...@googlegroups.com
За да не си играя със стекове и допълнителни опашки, просто си направих една допълнителна функция (почти същата като функцията queue_deque), която вместо първия елемент в опашката, да принтира последния

Ето я и нея:

int queue_deque_end(Queue *queue) 
{
if(queue->head > queue->tail)
{
return -1;
}

int result = (queue->items)[queue->tail];
queue->tail--;

return result;
}


А ето и как съм я използвал в зададената програма:

#include <stdio.h> 
#include <stdlib.h>

#define INITIAL_CAPACITY 5

typedef struct Queue Queue;

struct Queue
{
int *items;
int head;
int tail;
int capacity;
};

Queue *queue_create();
void queue_enqueue(Queue *queue, int element);
int queue_deque(Queue *queue);

int main()
{
Queue *queue = queue_create();
int digit = 0;
char c;

while((c=getchar()) != EOF)
{
if(c>='0' && c<='9')
{
digit = 10*digit + (c - '0');
}
}

do
{
queue_enqueue(queue, digit%2);//vkarvam v opashkata ostatykyt ot chisloto, vzeto ot vhodniq fail, pri delenie na 2
digit /=2;
}while(digit != 0);
while(queue->head < queue->tail)
{
printf("%d", queue_deque_end(queue));//tuk izpolzvam dopylnitelno napravenata funkciq, koqto na praktika prevryshta opashkata vyv stek, tyj kato vryshta chisloto na kraq na opashkata (LIFO)
}
printf("%d\n", queue_deque_end(queue)); //tova tuk e samo za da izglezhda izhodyt po-dobre
return 0;
}

Queue *queue_create()
{
Queue *queue = (Queue *)malloc(sizeof(Queue));
queue->items = (int *)malloc(sizeof(int) * INITIAL_CAPACITY);
queue->head = -1;
queue->tail = -1;
queue->capacity = INITIAL_CAPACITY;

return queue;
}

void queue_enqueue(Queue *queue, int element)
{
if(queue->head == -1)
{
queue->head++;
}
if(queue->tail + 1 == queue->capacity)
{
queue->items = (int *)realloc(queue->items, 2 * queue->capacity * sizeof(int));
queue->capacity *= 2;
}
queue->tail++;
(queue->items)[queue->tail] = element;
}

int queue_deque(Queue *queue)
{
if(queue->head > queue->tail)
{
return -1;
}

int result = (queue->items)[queue->head];
queue->head++;

return result;
}

int queue_deque_end(Queue *queue) //s tazi funkciq izvazhdam poslednoto chislo, vlqzlo v opashkata
{
if(queue->head > queue->tail)
{
return -1;
}

int result = (queue->items)[queue->tail];
queue->tail--;

return result;
}
























Reply all
Reply to author
Forward
0 new messages