Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 77

Очередь, стек, дерево? (реализация)

21.03.2013, 17:41. Показов 3756. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, помогите пожалуйста в реализации очереди дерева и стека(Не понимаю совсем((((

Добавлено через 3 минуты
Блин да кто-нибудьМне очень срочно нужно(((((
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.03.2013, 17:41
Ответы с готовыми решениями:

Составьте программу, которая создает очередь/стек.(Реализация работы с динамическими структурами)
Добрый день) Помогите вновь, пожалуйста, решить задачки :scratch:: 1. Составьте программу, которая создает очередь из произвольного...

Используя очередь или стек, описать процедуру или функцию, определяющую число вхождений элемента Е в дерево Т
Народ помогите пожалуйста! Проблема в том, что не понимаю суть задания. Прошу не код, а объяснения принципа реализации. С чего начать? как...

Стек и очередь
Задание 1. Реализовать программу, выполняющую стандартный набор операций со стеком на основе массива: • проверку пустоты стека ...

10
 Аватар для BumerangSP
4311 / 1423 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
21.03.2013, 17:48
Завалялась реализация стека. Не самая лучшая, но если срочно...
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include<iostream>
struct stack 
{
 int d;
 stack *next;
};
 
stack *first = NULL; 
 
void Push(int a)
{
 stack *p = new stack;
 p->d=a;
 p->next=first;
 first=p;
}
 
bool Pop(int& a)
{
 stack *p;
 if (first==NULL) 
  {
    std::cout<<"Stack is empty"<<std::endl;
    return false;
  }  
  else
   {
    p=first;
    first=first->next;
    a=p->d;
    delete p;
    return true;
   }
}
 
bool isEmpty(stack* first)
{
  if (first==NULL)
   return true;
  else  
   return false;
}
 
int main(void)
{
  int i;
  for (i= 0; i<10; i++)
    Push(i*i);
  while (Pop(i)==true)
    std::cout<<i<<" ";
}

Тут в цикле добавляются 10 элементов, а после выводятся на экран с удалением из стека.
1
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 77
21.03.2013, 17:52  [ТС]
А она через линейный список?
0
 Аватар для BumerangSP
4311 / 1423 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
21.03.2013, 17:54
Anastasiya1, динамическая, да, типа того.
0
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 77
21.03.2013, 17:56  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
 
using namespace std;
 
struct tElem{
int info;
tElem*next;
};
 
bool isEmpty(tElem*p){
if (p==NULL)
return true;
else
return false;
}
void push(tElem*&p,int value){
tElem*temp=new tElem;
temp->next=p;
temp->info=value;
p=temp;
}
int pop(tElem*&p){
int result = p->info;
tElem * t = p;
p = p->next;
delete t;
return result;
}
 
tElem * add_to_end(tElem * head, int x){
tElem * t = new tElem;
t->info = x;
t->next = NULL;
head->next = t;
}
 
int main(){
 
tElem *head;
tElem * stack = new tElem;
head = new tElem;
tElem * temp = head;
int x;
for(int i=0;i < 10; i++){
cin>>x;
add_to_end(temp, x);
}
 
temp = head;
 
while(!isEmpty(temp)){
x = pop(temp);
push(stack, x);
}
int i=0;
while(!isEmpty(stack)){
cout<<pop(stack)<<" ";
}
 
return 0;
}
Вот я пыталась писать, но при компиляции зависает(
0
 Аватар для BumerangSP
4311 / 1423 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
21.03.2013, 17:56
Очередь:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
 
struct q
{
    int zn;
    q* next;
    q* last;
};
 
q* f=NULL;
q* last=new(q);
 
void push(int a)
{ 
  q* p= new(q);
  p->zn=a;
  p->next=NULL;
  if (f==NULL)
   f=p;
  else
   last->next=p;
  last=p;   
}
 
bool pop(int& a)
{
  q* p;
  if (f==NULL)
    return false;
  else
  {
    a=f->zn;
    p=f;
    f=f->next;
    delete p;
    return true;
  }
}
 
int main()
{
 int a;
  for (int i=1; i<10; i++)
    push(i);
  while (pop(a)==true)
    std::cout<<a<<" ";
}

Заранее извиняюсь, если что-то не так, в код не заглядывал, это мои очень давние реализации, но добавляет, удаляет вроде все.
2
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 77
21.03.2013, 18:04  [ТС]
Извините, а можно еще спросить про очередь.Вы же написали программму,ну так вот, моя программа немного иная,взгляните пожалуйста(в нее нужно добавить ф-ии [bool isEmpty(tQueue queue)]; put(tQueue queue, tTreeElement*te) и tTreeElement(tQueue queue)...Посмотрите пожалуйста(((


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
 
using namespace std;
 
struct tTreeElement
{
   int info;
   tTreeElement*l,*r;
}
 struct tQueueElem
 {
     tTreeElement*value;
     tQueueElem*next;
 }TQUEUE q;
 q.head;q.tail;q.tail->next=new tQueueElem;
struct TQUEUE
{
    tQueueElem*head,*value;
}
 
 
void main()
{
    int max;
    tTreeElement*root;
    max=root->info;
    tQueue q;
    put(q,root);
    while(!isEmpty(q))
    {
        tTreeElement*temp=get(q);
        if(temp->info>max)
        max=temp->info;
    }
}
0
 Аватар для dimkaok
2 / 2 / 0
Регистрация: 06.03.2013
Сообщений: 128
21.03.2013, 18:05
Стек:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
class Stack {
    int st [ 3 ];
    int top;
  public:
      Stack ( ) : top ( -1 ) { } 
      void push ( int var ) { st [ ++top ] = var; }
      int pop ( )                 { return st [ top-- ]; }
};
int main ( ) {
    Stack st;
    st.push ( 7 );
    cout << st.pop ( ) << endl;
return 0;
}
Очередь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
using namespace std;
const int MAX = 3;
template < class T >
class Queue {
    int tail, head;
    T qu [ MAX ];
    int count;
  public:
      class ExFull { };
      class ExEmpty { };
      Queue ( ) : tail ( -1 ), head ( -1 ), count ( 0 ) { }
      void push ( T var ) {
        if ( count++ > MAX - 1 )
            throw ExFull ( );
        qu [ ++head ] = var;
        if ( head >= MAX - 1 )
            head = -1;
      }
      T pop ( ) {
        if ( count-- <= 0 )
            throw ExEmpty ( );
        T temp = qu [ ++tail ];
        if ( tail >= MAX - 1 )
            tail = -1;
        return temp;
      }
};
int main ( ) {
    try {
        Queue < int > q1;
        q1.push ( 11 );
        q1.push ( 22 );
        q1.push ( 33 );
        //q1.push ( 33 );
        cout << q1.pop ( ) << endl;
        cout << q1.pop ( ) << endl;
        cout << q1.pop ( ) << endl;
        cout << q1.pop ( ) << endl;
    }
    catch ( Queue < int > :: ExFull )
        { cout << "error: Full" << endl; }
    catch ( Queue < int > :: ExEmpty )
        { cout << "error: Empty" << endl; }
    return 0;
}
Только очередь с исключениями, осталась со старых времен
0
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 77
21.03.2013, 18:07  [ТС]
Извините, а можно еще спросить про очередь.Вы же написали программму,ну так вот, моя программа немного иная,взгляните пожалуйста(в нее нужно добавить ф-ии [bool isEmpty(tQueue queue)]; put(tQueue queue, tTreeElement*te) и tTreeElement(tQueue queue)...Посмотрите пожалуйста(((


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
 
using namespace std;
 
struct tTreeElement
{
int info;
tTreeElement*l,*r;
}
struct tQueueElem
{
tTreeElement*value;
tQueueElem*next;
}TQUEUE q;
q.head;q.tail;q.tail->next=new tQueueElem;
struct TQUEUE
{
tQueueElem*head,*value;
}
 
 
void main()
{
int max;
tTreeElement*root;
max=root->info;
tQueue q;
put(q,root);
while(!isEmpty(q))
{
tTreeElement*temp=get(q);
if(temp->info>max)
max=temp->info;
}
}
0
 Аватар для BumerangSP
4311 / 1423 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
21.03.2013, 18:29
Anastasiya1, в том коде, что выше, скорее всего, неправильно описана функция add_to_end.
Для того, что каждый раз добавлять элементы в конец очереди, нужно, чтобы главный указатель head остался на первом элементе. Новые узлы же лучше добавлять с помощью того же указателя t (который у Вас) + еще один дополнительный, который бы хранил адрес предыдущего элемента. Ну, или лучше сделать на основе двунаправленного списка (сейчас посмотрел, у меня как раз так сделано)).

Не по теме:

П.С. ставьте уже теги своему коду.

1
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 77
21.03.2013, 18:32  [ТС]
Благодарю, я поняла что вы имели ввиду..))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.03.2013, 18:32
Помогаю со студенческими работами здесь

Стек и очередь
Здравствуйте, реализую стек и очередь через массивы, помогите пожалуйста с заданием: из одинаковых элементов создать новую очередь (...

Стек и очередь
Система состоит из трех процессоров P1,P2,P3, очередиF, стекаSи распределителя задачR. В систему поступают запросы на выполнение задач трёх...

стек и очередь
Обращаюсь с просьбой помочь с задачами...Есть задача,готовая,ее нужно сделать через СТЕК и ОЧЕРЕДЬ!Пожалуйста!) Составить программу, в...

стек и очередь
ребят поделитесь плиз программами реализующими на си стек и очередь (хотябы ввод вывод данных)

Стек и очередь
Прошу помочь в решении задачи, я новичек!!!:( Мне необходимо создать стек и очередь на C++(Microsoft Visiual C++ 6.0) Буду очень...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru