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

Реализация стека FIFO и LIFO - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка в программе обработки строк http://www.cyberforum.ru/cpp-beginners/thread326404.html
Доброго вечера! Подскажите, пожалуйста, из-за чего ошибка. Есть задача: написать функцию, входными параметрами которой является указатель на строку и два символа. функция должна заменить в строке...
C++ Какая-нибудь реализация функции void Fun (double in, double *out) Подскажите, пожалуйста, какую-нибудь любую реализацию прототипа функции: void Fun (double in, double *out) http://www.cyberforum.ru/cpp-beginners/thread326395.html
C++ отладить програму
дана такая задача программы "Данный символьный файл. Учтем, что длина слов не превышает двадцати символов, определить, сколько в файле находится слов, составляя из одного, двух, трех и т.д....
в классе создаётся объект оператором new, как его удалить после использования в основной программе? delete в вызывающей функции не вариант! C++
Собсно //Это типа служебного класса. (Внимание! В оригинальном коде он вложен в класс xx, но я этого не стал делать, дабы не усложнять код!) class nemo_ { }; //А это вот класс для...
C++ что не так?не выводит значения... http://www.cyberforum.ru/cpp-beginners/thread326366.html
#include <vcl.h> #include <math.h> #include <iostream.h> #include <stdlib.h> #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused
C++ Вывод на монитор графики, не используя WinAPI Каким образом можно осуществлять работу с графикой и мультимедиа, не используя функции winapi? Не думаю, что это невозможно, ведь полно других ОС, кроме windows, использующих графику и визуализацию.... подробнее

Показать сообщение отдельно
Alecs12
1 / 1 / 0
Регистрация: 21.03.2011
Сообщений: 23

Реализация стека FIFO и LIFO - C++

27.06.2011, 00:20. Просмотров 5867. Ответов 10
Метки (Все метки)

Собственно, если у кого-нить будет время посмотреть мои реализации FIFO и LIFO стеков, и высказать замечания, буду очень признателен =)
Обычный FIFO стек, универсальный вроде как, вроде правильно с шаблонами разобрался:

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
62
63
64
template <class T>
class Stack
{
private:
    struct StackEl;
    StackEl *top;
public:
    Stack();
    Stack(T el);
    ~Stack();
    void Push(const T& el);
    T Pop();
};
 
template <class T> struct Stack<T>::StackEl
{
    T data;
    StackEl *prev;
};
 
template <class T> Stack<T>::Stack():top(NULL)
{
}
 
template <class T> Stack<T>::Stack(T el)
{
    StackEl * temp = new StackEl;
    temp->data = el;
    temp->prev = NULL;
    top = temp;
}
 
template <class T> Stack<T>::~Stack()
{
    if(top!=NULL)
    {
    while(top->prev!=NULL)
    {
        StackEl *t = new StackEl;
        t = top;
        top = top->prev;
        delete t;
    }
    delete top;
    }
}
 
template <class T> void Stack<T>::Push(const T& el)
{
    StackEl *t = new StackEl;
    t->data = el;
    t->prev = top;
    top = t;
}
 
template <class T> T Stack<T>::Pop()
{
    if(top==NULL)
        return NULL;
    StackEl *t = new StackEl;
    t = top;
    top = top->prev;
    return t->data;
}
LIFO стек, добавления нового элемента происходит в один его конец, а извлечение из противоположного

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
62
63
64
65
66
67
68
69
70
71
72
struct QueueElement
{
    char *el;
    QueueElement *next;
};
 
class PacketQueue
{
private:
    QueueElement *bottom;
    QueueElement *top;
 
public:
    PacketQueue();
    PacketQueue(QueueElement *first);
    int GetBottom(char*);
    int AddToQueue(char *newEl);
};
 
PacketQueue::PacketQueue():count(0), top(NULL), bottom(NULL)
{
}
 
PacketQueue::PacketQueue(QueueElement *first):count(0), top(NULL), bottom(NULL)
{
    AddToQueue(first->el);
}
 
int PacketQueue::GetBottom(char * ch)
{
    if(count<1)
            return -1;
    if(ch)
        delete[] ch;
    char *c= bottom->el;
    ch = new char[strlen(c)];
    if(!ch)
        return -1;
    strcpy(ch, c);
    printf("************ %s\n", ch);
    delete [] c;
 
    count = count - 1;
    if(count>0)
        bottom = bottom->next;
    else
    {
        top = NULL;
        bottom = NULL;
    }
    return 1;
}
 
int PacketQueue::AddToQueue(char *newEl)
{
    if(!newEl)
        return -1;
    QueueElement *temp = new QueueElement;
    if(!bottom)
    {
        bottom = temp;
    }
    else
        top->next = temp;
 
    temp->el = new char[strlen(newEl)];
    strcpy(temp->el, newEl);
    top = temp;
    top->next = NULL;
    count = count + 1;
    return 1;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru