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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2009, 17:18   #1
bars1984
Пользователь
 
Регистрация: 10.05.2009
Сообщений: 32
По умолчанию задача на очередь(Си)

Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>

typedef struct Spis {  
int number;            
struct Spis *next;   
} Spis;
	
	 void Enquenue(Spis**);
void Display(Spis*);   



void main()
{

Spis *begin=NULL; 

Enquenue(&begin); 
Display(begin);   

getch();
}

void Enquenue(Spis **begin)  
{
Spis *p,*tmp;
p=new Spis;  
p->number=0;
p->next=NULL;
*begin = p;

for(int i=1; i<10; i++) 
 {
  tmp = new Spis;
  p->next = tmp;
  tmp->next = NULL;
  tmp->number = i;
  p = p->next;
 }
}

void Display(Spis *begin) 
{
Spis *p= begin;
if(p==NULL)            
 printf("Queueis empty");
else
 printf("Queue");
while(p!=NULL)       
 {
 printf("\n%d", p->number);
 p=p->next;                     
 }
как в данной программе написать, чтобы элементы очереди вводить с экрана?

Последний раз редактировалось bars1984; 30.05.2009 в 17:20.
bars1984 вне форума Ответить с цитированием
Старый 30.05.2009, 17:23   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Никак, т.к. экран не является устройством ввода

Измените цикл в Enquenue вот так:
Код:
for(int i=1; i<10; i++)
 {
  tmp = new Spis;
  p->next = tmp;
  tmp->next = NULL;
  printf("Enter element %d: ",i);
  scanf("%d",&tmp->number);
  p = p->next;
 }
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 30.05.2009, 17:29   #3
bars1984
Пользователь
 
Регистрация: 10.05.2009
Сообщений: 32
По умолчанию

Как вести максимальный размер очереди?
bars1984 вне форума Ответить с цитированием
Старый 30.05.2009, 17:31   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от bars1984
Как вести максимальный размер очереди?
Для этого вам нужно доделать само описание очереди. И вводить каждый элемент нужно будет функцией, где будет проверяться, не достигнут-ли предел.
Посмотрите вот эту тему: http://programmersforum.ru/showthread.php?t=52240
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 31.05.2009, 17:01   #5
bars1984
Пользователь
 
Регистрация: 10.05.2009
Сообщений: 32
По умолчанию

как из очереди удалить первый элемент и добавить его в конец ?
bars1984 вне форума Ответить с цитированием
Старый 31.05.2009, 17:07   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от bars1984
как из очереди удалить первый элемент и добавить его в конец ?
Так и сделать - копировать в конец и удалить из начала.
Что значит как? Все зависит от реализации очереди.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 31.05.2009, 19:03   #7
bars1984
Пользователь
 
Регистрация: 10.05.2009
Сообщений: 32
По умолчанию

Код:
void Enquenue(Spis **begin) 
{
Spis *p,*tmp;
p=new Spis; 
p->number=0;
p->next=NULL;
*begin = p;
int size=0;

printf("Enter size:");
scanf("%d", &size);

for(int i=1; i<=size; i++) 
 {
  tmp = new Spis;
  p->next = tmp;
  tmp->next = NULL;
  printf("Enter element %d: ",i);
  scanf("%d",&tmp->number);
  p = p->next;
 }

}
помогите в данной очереди удалить первый элемент
bars1984 вне форума Ответить с цитированием
Старый 31.05.2009, 19:14   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
void DeleteFirst(Spis **begin)
{
 Spis *p=*begin;
 *begin = (*begin)->next;
 delete p;
 p = NULL;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 01.06.2009, 00:31   #9
bars1984
Пользователь
 
Регистрация: 10.05.2009
Сообщений: 32
По умолчанию

помогите в данную программу записать условие:при вводе очередного числа из очереди удаляется первый элемент, и если он не совподает с введенным число, то последнее добавляется в очередь
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>

typedef struct Spis {  
int number;            
struct Spis *next;     
} Spis;
	
	 
void Enquenue(Spis**);
 void Display(Spis*);   
void DeleteFirst(Spis**);



void Enquenue(Spis **begin)  
{
Spis *p,*tmp;
p=new Spis;  
p->number=0;
p->next=NULL;
*begin = p;
int size=0;

printf("Enter size:");
scanf("%d", &size);

for(int i=1; i<=size; i++) 
 {
  tmp = new Spis;
  p->next = tmp;
  tmp->next = NULL;
  printf("Enter element %d: ",i);
  scanf("%d",&tmp->number);
  p = p->next;
 }
}
void DeleteFirst(Spis **begin)
{
 Spis *p=*begin;
 *begin = (*begin)->next;
 delete p;
 p = NULL;
}

void Display(Spis *begin) 
{
Spis *p= begin;
if(p==NULL)            
 printf("Queueis empty");
else
 printf("Queue");
while(p!=NULL)       
 {
 printf("\n%d", p->number);  
 p=p->next;                     
 }
}
void main()
{

Spis *begin=NULL; 

Enquenue(&begin);  

DeleteFirst(&begin);
Display(begin);    

getch();
}
bars1984 вне форума Ответить с цитированием
Старый 01.06.2009, 00:40   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от bars1984
помогите в данную программу записать условие:при вводе очередного числа из очереди удаляется первый элемент, и если он не совподает с введенным число, то последнее добавляется в очередь
А сами-то как думаете делать?

Вводите число. Если оно равно первому элементу очереди, то просто удаляем первый элемент. Иначе + к этому проходим по очереди до конца и добавляем туда новый элемент.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очередь Юлькин Общие вопросы C/C++ 4 30.05.2009 16:00
Задача на очередь Freer Общие вопросы C/C++ 26 06.11.2008 01:14
очередь odi_noki Общие вопросы Delphi 3 24.10.2008 12:09