С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.81
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
#1

однонаправленный список - C++

11.06.2009, 00:02. Просмотров 2718. Ответов 2
Метки нет (Все метки)

попалась веселая задачка.
"построить функцию преобразующую заданный однонаправленный список в аналогичный список где элементты расположенны в обратном порядке"

т.е. как я понял либо уже у текущего списка ссылки "развернуть" наоборот, либо создать такой же и скопировать в него значения первого с конца.

проблема вот в чем. теоретически я понимаю все. и про списки знаю. практически - не работал еще с ними ни разу.

мне готовая прога не нужна, просто кто то может накидать что то похожее на работающее с функциями построения списка и добавления в него элементов.

предположим что его структура проста:
C++
1
2
3
4
5
struct list
{
   int i;
   struct list *next;
} info;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2009, 00:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос однонаправленный список (C++):

Добавить в список элемент после элемента с заданным инф.полем [Однонаправленный список] - C++
Вообщем есть: Функция создание списка Функции вывода на экран Функция добавление элемента с номером k А нужно ввести...

однонаправленный список - C++
Помогиде дописать программу. Формируется однонаправленный список, заполняется (int). теперь надо как то передрать его и удалить все...

однонаправленный список - C++
Ребятушки милые мои :) Помогите решить задачу !!! Даны натуральное число n и однонаправленный список, содержащий действительные...

однонаправленный список - C++
Прошу помощи: 1.Написать функцию для создания списка. Функция может создавать пустой список, а затем добавлять в него элементы. ...

Однонаправленный Список - C++
Как написать ф-ю добавления в конец элемента в однонаправленном списке?

Однонаправленный список - C++
Задача:Создать линейный однонаправленный список из целых чисел.Вставить в список последний четный элемент после каждого нечетного элемента....

2
Deiron
26 / 26 / 1
Регистрация: 25.05.2009
Сообщений: 98
11.06.2009, 02:03 #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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//базовый класс узла
class Node
{
    public:
        Node(){};
        virtual ~Node(){};
        virtual Node * Insert (int& iVal)=0;
        virtual void Show()=0;
    private:
} ;
//внутренний узел
class InternalNode: public Node
{
    public:
        InternalNode(int iVal,Node* n);
        ~InternalNode() {delete next;delete data;};
        virtual Node * Insert (int& iVal);
        virtual void Show(){cout<<*data<<endl; next->Show();};
    private:
        int* data;
        Node * next;
};
InternalNode::InternalNode (int iVal,Node* n)
{
    data = new int;
    *data = iVal;
    next=n;
} 
//посылаем элемент дальше, пока он не наткнется на TailNode
Node* InternalNode::Insert (int& iVal)
{
    next=next->Insert(iVal);
    return this;
}
//"концевой" элемент. Не пускает дальше себя
class TailNode:public Node
{
    public:
        TailNode(){};
        ~TailNode(){};
        virtual Node* Insert(int& iVal);
        virtual void Show() {};
    private:
};
Node* TailNode:: Insert(int& iVal)
{
    Node* temp;
    temp = new InternalNode (iVal,this);
    return temp;
}
//головной элемент. При добавлении элемента посылает его дальше по списку.
class HeadNode:public Node
{
    public:
        HeadNode();
        ~HeadNode() {delete next;};
        virtual Node * Insert (int& iVal);
        virtual void Show() {next->Show();};
    private:
        Node* next;
};
HeadNode::HeadNode()
{
    next=new TailNode;
}
Node* HeadNode::Insert(int& iVal)
{
    next= next->Insert(iVal);
    return this;
}
//сам список
class ListFwd 
{
    public:
        ListFwd();
        ~ListFwd() {delete head;};
        void Insert (int iVal);
        void ShowAll() {head->Show();};
    private:
        HeadNode* head;
};
ListFwd::ListFwd()
{
    head=new HeadNode;
}
void ListFwd::Insert(int iVal)
{
    head->Insert(iVal);
}
Вот полностью работающий однонаправленный список.
Есть два пути решения твоей задачи. 1: "отгрызать" по одному элементу в новый список. 2. создать двунаправленный список, в который запихать все элементы однонаправленного, а затем, просматривая двунаправленный список с конца пихаем его эл-ты в однонаправленный список.
0
Gravity
564 / 558 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
11.06.2009, 02:16 #3
Можно проще - всего лишь перенаправить ссылки.
C
1
2
3
4
5
6
7
8
9
10
11
List *reverse(List *lp)
{
    List *cur, *prev, *tmp;
 
    prev = NULL;
    for(cur = lp; cur != NULL; prev = cur, cur = tmp) {
        tmp = cur->next;
        cur->next = prev;
    }
    return prev;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2009, 02:16
Привет! Вот еще темы с ответами:

Однонаправленный список - C++
Создать однонаправленную очередь с числами в диапазоне от –50 до +50. Удалить из очереди каждый второй элемент.В конце работы все очереди...

Однонаправленный список - C++
Организовать ввод в однонаправленный список. Узел списка состоит из двух полей: целое число и указатель. Необходимо удалить из списка...

однонаправленный список - C++
чем отличаеться point *p; p=new(point); от p=new point; ???

Однонаправленный список - C++
Есть задание - перегрузка операций. Дается 3 штуки Однонаправленный список с элементами типа char доступ к элементу в...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.