Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2014, 18:34   #1
abogdan
Новичок
Джуниор
 
Регистрация: 16.04.2012
Сообщений: 2
По умолчанию Array of Queues

Никак не могу разобраться с вопросом "Как создать массив из n очередей на C(!)?"
Работа с очередями понятна(и происходит как-то)
так:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#define FALSE 0
#define TRUE 1


typedef struct item {
	int data;
	struct item *next;
}	Item;

void Enquene(void);
void Dequene(void);
void Display(void);

Item *head = NULL, *tail = NULL; 

int main(void)
{
	int done = FALSE;
	char c;

	while(!done) {
		printf("\n\nA)dd, D)elete, Q)uit ");
		c = getchar();
		switch(c) {
			case 'A':
				Enquene();
				break;
			case 'D':
				Dequene();
				break;
			case 'Q':
				done = TRUE;
				break;
		}
	Display();
	}

	return 0;
}

void Enquene(void)
{
	Item* p;

	p = (Item *)malloc(sizeof(Item));
	p->data = rand();
	p->next = NULL;
	if (head == NULL)
		head = p;
	else
		tail->next = p;
	tail = p;
}

void Dequene(void)
{
	Item* p = head;

	if (head != NULL) {
		head = head->next;
		if (head == NULL)
			tail = NULL;
		free(p);
	}
}

void Display(void)
{
	Item* p = head;

	system("clear");
	if (p == NULL)
			printf("Quene is empty");
	else
		printf("Quene: ");
	while (p != NULL) {
		printf("(\n%d)", p->data);
		p = p->next;
	}
}
Но вот никак не могу понять как реализовать, напиример, массив из n очередей, содержащих random() значение для дальнейшей с ними работы(добавление/удаление элементов и тп). Что-то вроде:
array: ((6756)(6556)(5457)(64)(3)(542)(47) (35)(565)(222),...,n);
abogdan вне форума Ответить с цитированием
Старый 01.05.2014, 20:13   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Ну как?

Если это очередь:
Код:
Item *head = NULL, *tail = NULL;
то я бы засунул это в структуру
Код:
struct qu {
  item *head, *tail;
};
И если бы мне внезапно потребовался бы массив очередь, написал бы так:
Код:
qu *arr = new qu[10];
qu[0].head ... // обращаюсь к голове первой очереди
rrrFer вне форума Ответить с цитированием
Старый 01.05.2014, 20:55   #3
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
[/CODE]

И если бы мне внезапно потребовался бы массив очередь, написал бы так:
Код:
qu *arr = new qu[10];
qu[0].head ... // обращаюсь к голове первой очереди
rrrFer, на мой взгляд все абсолютно доступно объяснил. Но вставлю свои 5 копеек
В Си вот так:

Код:
qu *arr = (qu*)malloc(10*sizeof(qu));
И обязательно...
Освобождайте память.

Код:
free(arr);
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 01.05.2014 в 20:57.
Bugrimov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Записать Array of AnsiChar в Array of AnsiChar Anton911 Общие вопросы Delphi 4 07.05.2012 21:58
str->array & array->str LeoN PHP 6 06.07.2010 22:38
Use two queues to implement a stack C++ Kevlar Помощь студентам 0 01.11.2009 14:44
Array CrystaLize Паскаль, Turbo Pascal, PascalABC.NET 7 29.09.2009 21:33
Array или не array Димарик Общие вопросы Delphi 4 18.06.2007 15:16