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

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
fenix0093
Сообщения: 1
Зарегистрирован: 28 ноя 2012, 18:19

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

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

#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;
}
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

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

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

Для выводы всей очереди и очистки очереди можно будет написать отдельные функции.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить