Страница 1 из 1

можно ли считать данный код реализацией очереди

Добавлено: 28 ноя 2012, 18:24
fenix0093
можно ли считать данный код реализацией очереди

Код: Выделить всё

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

typedef struct LIST{
	int val;
	struct LIST *ptr;
};

LIST *head = NULL;
LIST *tail = NULL;
LIST *tek_ptr;

//добавление
void push(int n){

	tek_ptr = (LIST*)malloc(sizeof(LIST));
	tek_ptr->val = n;
	
	if(head == NULL && tail == NULL)
		head = tek_ptr;
	else
		tail->ptr = tek_ptr;
	
	tail = tek_ptr;
	tail->ptr = NULL;

}

//извлечение и вывод
void pop(){

	tek_ptr = head;
	while(tek_ptr!= NULL){
		printf("%d", tek_ptr->val);
		tek_ptr = tek_ptr->ptr;
	}

}


int main(){

	int n;
	scanf("%d", &n);
	push(n);

	scanf("%d", &n);
	push(n);

	scanf("%d", &n);
	push(n);

	pop();

	return 0;
}

Re: можно ли считать данный код реализацией очереди

Добавлено: 03 дек 2012, 15:39
Romeo
Это реализация односвязного списка, но это нельзя называть полноценной реализацией очереди. Для того, чтобы это было очередью, нужно обеспечить принцип FIFO - First In, First Out.

Функция push позволяет добавлять данные только в конец - так что полдела сделано. Нужно поменять функцию pop так, чтобы она позволяла извлекать данные тоже только с конца и однократно, а не в цикле. Тогда две функции push и pop станут симметричными и обеспечат принцип FIFO, а как следствие превратят односвязный список в классическую очередь.

Для выводы всей очереди и очистки очереди можно будет написать отдельные функции.