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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 09.12.2008, 13:24   #1
Neasit
 
Регистрация: 09.12.2008
Сообщений: 3
По умолчанию Помогите написать программу на очередь

Вот задали программу:
Реализовать структуру данных очередь с приоритетом на основе массива. Функция приоритета должна определятся пользователем. В случае если длинна массива недостаточна, следует динамически увеличивать длину массива.

Вот второй день из книг не вылазю как эту очередь с приоритетом сделать?? Да ещё чтобы пользователем задавался приоритет...не пойму...Кто знает понимает объясните плиззз...а то вот сдавать уже надо!
Всем заранее спасибо!)
Neasit вне форума
Старый 09.12.2008, 19:31   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Товарищ, а вы не пробовали в инете поискать эту информацию? Гугл, Яндекс, Википедия (последнее вообще кладезь полезной информации)...
Очередь с приоритетом
MaTBeu вне форума
Старый 09.12.2008, 20:49   #3
Neasit
 
Регистрация: 09.12.2008
Сообщений: 3
По умолчанию

Хм...Спасибо!Я прямо про Вики забыл...нашёл интересные ссведения))) Спасибо)) Буду дальше думать) (а поисковики уже перерыл...не сказать что ничего не нашёл но и нашёл на достаточно)
Neasit вне форума
Старый 12.12.2008, 20:37   #4
Neasit
 
Регистрация: 09.12.2008
Сообщений: 3
По умолчанию

Собственно решил я эту задачку)) Вчера сдал!) Вот листинг Может кому и пригодится:
Цитата:
#include <cstdlib>
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
typedef int DATA;
struct Info
{
DATA inf; // данные
int priority; // приоритет
};
enum {EMPTY=-1};
struct Queue
{
int size;
// Массив элементов
Info *q;
int first,full;
};

void Queue_Init(Queue &Q)//инициализация структуры данных
{
Q.size=10;
Q.q=(Info*)malloc(Q.size*sizeof(Inf o));
Q.first=EMPTY;
Q.full=Q.size;
};

bool Queue_IsEmpty(Queue Q) // TRUE если структура пуста, FALSE в противном случае
{
return Q.first==EMPTY;
};

int Queue_Size(Queue Q) //количество элементов в структуре
{
return Q.first+1;
}

Info Queue_last(Queue Q) //получить последний элемент очереди
{
return (Q.q[Q.first]);
}


Info Queue_first(Queue Q) //получить первый элемент очереди
{
return (Q.q[EMPTY+1]);
}

void Queue_Push(Queue &Q,Info elem) // поместить элемент в конец очереди
{
int i;
// поиск позиции
for(i=Q.first; i>=0; i--)
if(Q.q[i].priority>elem.priority)
break;
// Если очередь заполнена то увеличиваем массив
if(Q.first==Q.full)
{
Q.q=(Info*)realloc(Q.q,Q.size+1);
Q.full++;
Q.q[i+1]=elem;
Q.first++;
}
else
{
for(int j=Q.first; j>=i; j--)
Q.q[j+1]=Q.q[j];
Q.q[i+1]=elem;
Q.first++;
}
}


void Queue_Print(Queue Q) //вывести на экран
{
if(Queue_IsEmpty(Q))
printf("Queue is empty");

for(int i=EMPTY+1; i<=Q.first; i++)
{
printf("%d-",Q.q[i].inf);
printf("%d \n",Q.q[i].priority);
}
}

void Queue_dispose(Queue &Q) //освобождение выделенной памяти
{
free(Q.q);
}


bool Queue_pop(Queue &Q) //удаление первого элемента
{
if (Queue_IsEmpty(Q))
return false;
else
{
for(int i=EMPTY+1; i<=Q.first; i++)
Q.q[i]=Q.q[i+1];
Q.first--;
return true;
}
}

int main()
{
Queue Q; //Очередь
Queue_Init(Q);
Info f;
int c=1;
printf("Enter Queue: \n **for done press 0 \n");
while (c!=0)
{
printf("Enter information: ");
scanf("%d",&c);
f.inf=c;
if (c!=0)
{
printf("Enter priority: ");
scanf("%d",&c);
f.priority=c;
Queue_Push(Q,f);
}
}
Queue_Print(Q);
printf("First element is - %d\n",Queue_first(Q));
printf("Last element is - %d\n",Queue_last(Q));
printf("Size queue is - %d \n",Queue_Size(Q));
printf("Delete first element \n");
Queue_pop(Q);
Queue_Print(Q);
Queue_dispose(Q);
getch();
return 0;
}
Вот) Всё тему можно считать закрытой)
Neasit вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите написать программу voher3 Фриланс 3 01.12.2008 10:57
Помогите написать программу на с++ Пиранья Помощь студентам 1 04.10.2008 17:54
Помогите написать программу KHAKER Помощь студентам 1 31.10.2007 18:34
Найти отношения суммы элементов главной диагонали и суммы элементов побочной диагонали квадратной матрицы Elmander Помощь студентам 2 21.06.2007 07:15