Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Anastasiya1
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 77
21.03.2013, 17:41     Очередь, стек, дерево? (реализация) #1
Всем привет, помогите пожалуйста в реализации очереди дерева и стека(Не понимаю совсем((((

Добавлено через 3 минуты
Блин да кто-нибудьМне очень срочно нужно(((((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2013, 17:41     Очередь, стек, дерево? (реализация)
Посмотрите здесь:

C++ Стек и очередь
стек и очередь C++
C++ Стек и очередь
C++ Стек и очередь
стек и очередь C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
21.03.2013, 17:48     Очередь, стек, дерево? (реализация) #2
Завалялась реализация стека. Не самая лучшая, но если срочно...
Кликните здесь для просмотра всего текста
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 элементов, а после выводятся на экран с удалением из стека.
Anastasiya1
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 77
21.03.2013, 17:52  [ТС]     Очередь, стек, дерево? (реализация) #3
А она через линейный список?
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
21.03.2013, 17:54     Очередь, стек, дерево? (реализация) #4
Anastasiya1, динамическая, да, типа того.
Anastasiya1
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 77
21.03.2013, 17:56  [ТС]     Очередь, стек, дерево? (реализация) #5
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;
}
Вот я пыталась писать, но при компиляции зависает(
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
21.03.2013, 17:56     Очередь, стек, дерево? (реализация) #6
Очередь:
Кликните здесь для просмотра всего текста
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<<" ";
}

Заранее извиняюсь, если что-то не так, в код не заглядывал, это мои очень давние реализации, но добавляет, удаляет вроде все.
Anastasiya1
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 77
21.03.2013, 18:04  [ТС]     Очередь, стек, дерево? (реализация) #7
Извините, а можно еще спросить про очередь.Вы же написали программму,ну так вот, моя программа немного иная,взгляните пожалуйста(в нее нужно добавить ф-ии [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;
    }
}
dimkaok
 Аватар для dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
21.03.2013, 18:05     Очередь, стек, дерево? (реализация) #8
Стек:
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;
}
Только очередь с исключениями, осталась со старых времен
Anastasiya1
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 77
21.03.2013, 18:07  [ТС]     Очередь, стек, дерево? (реализация) #9
Извините, а можно еще спросить про очередь.Вы же написали программму,ну так вот, моя программа немного иная,взгляните пожалуйста(в нее нужно добавить ф-ии [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;
}
}
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
21.03.2013, 18:29     Очередь, стек, дерево? (реализация) #10
Anastasiya1, в том коде, что выше, скорее всего, неправильно описана функция add_to_end.
Для того, что каждый раз добавлять элементы в конец очереди, нужно, чтобы главный указатель head остался на первом элементе. Новые узлы же лучше добавлять с помощью того же указателя t (который у Вас) + еще один дополнительный, который бы хранил адрес предыдущего элемента. Ну, или лучше сделать на основе двунаправленного списка (сейчас посмотрел, у меня как раз так сделано)).

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2013, 18:32     Очередь, стек, дерево? (реализация)
Еще ссылки по теме:

C++ Стек и очередь
C++ Составьте программу, которая создает очередь/стек.(Реализация работы с динамическими структурами)
C++ Очередь и стек

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

Или воспользуйтесь поиском по форуму:
Anastasiya1
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 77
21.03.2013, 18:32  [ТС]     Очередь, стек, дерево? (реализация) #11
Благодарю, я поняла что вы имели ввиду..))
Yandex
Объявления
21.03.2013, 18:32     Очередь, стек, дерево? (реализация)
Ответ Создать тему
Опции темы

Текущее время: 06:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru