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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2013, 16:55   #1
Yakoff
Пользователь
 
Регистрация: 28.05.2011
Сообщений: 21
По умолчанию Основные операции над динамической очередью в Си.

Задача: реализовать следующие операции над динамической очередью

1 - создать пустую очередь
2 - поместить элемент в очередь
3 - распечатать содержимое очереди
4 - извлечь элемент из очереди
5 - выход

Вид очереди - линейный двунаправленный циклический список с одним указателем

Есть код, где вид очереди - линейный односвязный список с двумя указателями. Что нужно исправить, чтобы получить двунаправленный?

Заранее спасибо

Код:
ochered.h

#ifndef OCHERED_H
#define OCHERED_H
struct elem
{elem *next; int el;};
struct list{elem *beg,*end;};
void pust(list **uk);
void put(list* &p, int num);
int isEmpty(list* &p);
int del(list* &p,int &num);
list * print(list *p);
#endif

ochered.cpp

#include <stdio.h>
#include "ochered.h"
void pust(list **uk)
{
*uk=new list; (*uk)->beg=0;
}
void put(list* &p, int num)
{
if (p->beg==NULL) {
p->beg=new elem;
p->beg->next=NULL; p->beg->el=num;p->end=p->beg;
}
else {
elem *q=new elem;
q->el=num; q->next=NULL;p->end->next=q;
p->end=q;
}
}
int del(list* &p, int &x)
{
if (!isEmpty(p)) 
{	x=(*p).beg->el;
	elem *m;
	m=(*p).beg;
	if((*p).beg->next==0) {(*p).end=0;}
	(*p).beg=(*p).beg->next;
	delete m;
	return 1;
}
return 0;
}
list * print(list *p)
{int m;
printf_s("Содержимое очереди: ");
if (!isEmpty(p)) 
{list *q;
pust(&q);
do 
{del(p,m);printf_s("%d ",m);put(q,m);}
while(!isEmpty(p));
printf_s("\n");
return q;}
}
int isEmpty(list* &p)
{if (p->beg==NULL) return 1;
else return 0;}

main.cpp

#include <stdio.h>
#include <locale.h>
#include <string.h>
#include "ochered.h"
void main()
{
int n=0,exitFlag=0,m=NULL;list *uk;
setlocale(LC_CTYPE, "Russian");
do 
{
	printf_s("<1> - создать пустую очередь \n");
	printf_s("<2> - поместить элемент в очередь \n");
	printf_s("<3> - распечатать содержимое очереди \n");
	printf_s("<4> - извлечь элемент из очереди \n");
	printf_s("<5> - выход\n");
	int repeatFlag=0;
	do 
	{
	printf_s("Введите номер команды (от 1 до 5): ");
	scanf_s("%d",&n);
		switch (n) 
		{
			case 1: pust(&uk);
			break;
			case 2: printf_s("Введите число: ");
				scanf_s("%d", &m);
				put(uk, m);
			break;
			case 3: if (!isEmpty(uk))
				uk=print(uk);
					else
				printf_s("очередь пуста\n");
			break;
			case 4: if ((del(uk,m)))
				printf_s("Из очереди извлечен элемент:%d\n", m);
					else
				printf_s("Очередь пуста\n");
			break;
			case 5: exitFlag=1;
			break;
			default: printf_s("ОШИБКА: неверный номер команды\n");
			repeatFlag=1;
		}
	} 
	while (!repeatFlag&&!exitFlag);
} 
while (!exitFlag);
}
Yakoff вне форума Ответить с цитированием
Старый 04.06.2013, 08:03   #2
Yakoff
Пользователь
 
Регистрация: 28.05.2011
Сообщений: 21
По умолчанию

................
Yakoff вне форума Ответить с цитированием
Старый 04.06.2013, 11:32   #3
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

По поводу двусвязных списков маса информации, неужели ничего не удалось найти?
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Основные операции с текстовыми файлами Лина55 Общие вопросы C/C++ 2 27.03.2013 23:33
операции над стеком VinDiz Помощь студентам 11 24.01.2013 00:33
Какие существуют основные действия над массивами? Женька Good Помощь студентам 2 27.12.2011 16:32
Основные операции с текстовыми файлами -=Дрюня=- Помощь студентам 0 26.11.2011 09:42
Паскаль.Основные операции с двоичными файлами matrinishna Помощь студентам 3 13.03.2011 12:57