Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [c]очередь 
:(
    Опции темы
Zaulyx
Дата 28.12.2008, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



Код

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>

#define FALSE 0
#define TRUE 1

typedef struct item
{
    int data;
    struct item *next;
}
Item;

void Add(void);
void DeleteAll(void);
void Del_Element(void);
void Display(void);
void Clear(void);

Item *head = NULL, *tail = NULL;

main()
{
    int done = FALSE;
    char c;

    while (!done) {
        printf("\n\nAdd.................(A)\nClear...............(C)\nDelete_Element......(D)\nDisplay.............(S)\nQuit................(Q)\n");
        c = getch();
        switch (toupper(c)) {
            case 'A':
                Add();
                break;
            case 'C':
                DeleteAll();
                break;
            case 'Q':
                done = TRUE;
                break;
            case 'D':
                 Del_Element();
                 break;
            case 'S' :
                 Display();
                 break;
        }
    }
    printf("\n");
    Clear();
    return 0;
}

void Add(void)
{
    Item* p;
    int dtt;
    p = (Item *)malloc(sizeof(Item));
    printf("vvedite data: ");
    scanf("%d", &dtt);
    p->data = dtt;
    p->next = NULL;
    if (head == NULL)
        head = p;
    else
        tail->next = p;
    tail = p;
}

void DeleteAll(void)
{
    Item* p = head;

    if (head != NULL) {
        head = head->next;
        if (head = NULL)
            tail = NULL;
        free(p);
    }
}


void Display(void)
{
    Item* p = head;

    if (p == NULL)
        printf("\nQueue is empty");
    else
        printf("\nQueue: ");
    while (p != NULL) {
        printf("\n%d", p->data);
        p = p->next;
    }
}

void Clear(void)
{
    Item *p = head;

    while (head != NULL) {
        head = head->next;
        free(p);
        p = head;
    }

}

void Del_Element(void)
{
Item* p = head;
if (head != NULL)
head=head->next;
}



как мне сделать так чтобы работать можно с любым количеством очередей??Хелп плз. Завтра сдавать

Это сообщение отредактировал(а) Zaulyx - 28.12.2008, 14:42
PM MAIL   Вверх
mes
Дата 28.12.2008, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Zaulyx @  28.12.2008,  14:29 Найти цитируемый пост)
как мне сделать так чтобы работать можно с любым количеством очередей??


Item *head = NULL, *tail = NULL; - упаковать в структуру,  и передавать ее инстанцию в качестве аргумента в функции.



--------------------
PM MAIL WWW   Вверх
pan2004
Дата 28.12.2008, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 2
Всего: 9



Цитата(Zaulyx @  28.12.2008,  14:29 Найти цитируемый пост)
как мне сделать так чтобы работать можно с любым количеством очередей

Наверно, для начала избавиться от глобальных переменных и сделать так, чтобы функции принимали нужные им параметры, и возвращали результат например:
Код

Item* Enqueue(Item* tail = NULL)
{
    Item* p;

    p = (Item *)malloc(sizeof(Item));
    p->data = rand();
    p->next = NULL;
    if (tail)
        tail->next = p;
    return p;
}


Добавлено через 1 минуту и 55 секунд
PS
Код

void Del_Element(void)
{
Item* p = head;
if (head != NULL)
head=head->next;
}

Утечка памяти. Упс...


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
Zaulyx
Дата 28.12.2008, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



т.е мне во все функции запихать вместо void     Item* tail = NULL  ?? и возвращать p ?? 
PM MAIL   Вверх
pan2004
Дата 28.12.2008, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 2
Всего: 9



Цитата(Zaulyx @  28.12.2008,  15:13 Найти цитируемый пост)
во все функции

С умом конечно надо делать, а не от балды. Посмотреть, каким функциям что для работы надо - соответственно и писать аргументы. Посмотреть, что из них имеет смысл возвращать. Приведенная мной функция - только в качестве примера, и простым копипастом тут наврятли обойдешься.
Потом, после проведенного рефакторинга, я думаю реально будет сделать еще один массив(список) этого списка. Вот собственно и все.


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0947 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.