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

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

Войти
Регистрация
Восстановить пароль
 
p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
#1

Абстрактный тип данных - C++

20.11.2013, 13:27. Просмотров 559. Ответов 5
Метки нет (Все метки)

Пользуясь указателями, напишите реализацию списке открытого с двух сторон, в котором вставка и удаление происходят с обоих концов
но не пользуйтесь указателем на хвост списка...

P.S. помогите чайнику)

Добавлено через 1 час 35 минут
соответствует ли код lemegeton моему условию?
отпишитесь, пожалуйста
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
90
91
92
93
94
#include <stdlib.h>
#include <stdio.h>
 
typedef int ValueType;
 
typedef struct Node {
  ValueType value;
  struct Node *prev;
  struct Node *next;
} Node;
 
typedef struct Deque {
  Node base;
  size_t size;
} Deque;
// создание элемента с добавлением его в список
Node *NodeNew(Node *next, Node *prev, ValueType value) {
  Node *node = (Node*)malloc(sizeof(Node));
  prev->next = next->prev = node;
  node->next = next;
  node->prev = prev;
  node->value = value;
  return node;
}
// удаление ноды с изъятием её из списка
void NodeDelete(Node *node) {
  node->next->prev = node->prev;
  node->prev->next = node->next;
  free(node);
}
// инициализация дека
void DequeNew(Deque *deque) {
  deque->base.next = deque->base.prev = &(deque->base);
 
}
// проверка на пустоту дека
int DequeEmpty(Deque *deque) {
  return (deque->base.next == &(deque->base));
}
// удаление дека
void DequeDelete(Deque *deque) {
  while (!DequeEmpty(deque))
    NodeDelete(deque->base.next);
  deque->size = 0;
}
// добавление в конец
void DequePushBack(Deque *deque, ValueType value) {
  NodeNew(&(deque->base), deque->base.prev, value);
}
// удаление с конца
void DequePopBack(Deque *deque) {
  NodeDelete(deque->base.prev);
}
// добавление в начало
void DequePushFront(Deque *deque, ValueType value) {
  NodeNew(deque->base.next, &(deque->base), value);
}
// удаление с конца
void DequePopFront(Deque *deque) {
  NodeDelete(deque->base.next);
}
// первый элемент дека
ValueType DequeFront(Deque *deque) {
  return deque->base.next->value;
}
// последний элемент дека
ValueType DequeBack(Deque *deque) {
  return deque->base.prev->value;
}
// печать всех элементов дека
void DequePrintf(Deque *deque, const char *format, const char *finish) {
  Node *node = deque->base.next;
  while (node != &(deque->base)) {
    printf(format, node->value);
    node = node->next;
  }
  printf("%s", finish);
}
 
int main(int argc, char *argv[]) {
  int i;
  Deque deque;
  DequeNew(&deque);
  for (i = 0; i < 100; ++i)
    if (i % 2)
      DequePushBack(&deque, i);
    else
      DequePushFront(&deque, i);
  DequePopBack(&deque);
  DequePopFront(&deque);
  DequePrintf(&deque, "%4d", "\n");
  DequeDelete(&deque);
  return 0;
}
Добавлено через 14 часов 34 минуты
есть у кого то хотя бы примеры? и на этом благодарен буду!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2013, 13:27     Абстрактный тип данных
Посмотрите здесь:

C++ Создать абстрактный тип данных - класс вектор
Создать абстрактный тип данных-класс вектор C++
C++ Абстрактный тип данных-Список(С++ алгоритмы)
C++ абстрактный тип данных
C++ Как описать абстрактный тип данных?
C++ Создать абстрактный тип данных (структура) - окно
Создать абстрактный тип данных - класс вектор C++
Абстрактный тип данных C++
C++ Абстрактный тип данных
C++ Абстрактный тип данных
C++ Абстрактный тип данных
C++ Разработайте и реализуйте абстрактный тип данных

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
20.11.2013, 13:34     Абстрактный тип данных #2
p1ka4y777,

Не по теме:

и не пользоваться указателем на голову списка

p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
20.11.2013, 20:54  [ТС]     Абстрактный тип данных #3
Спасибо за совет

Добавлено через 7 часов 6 минут
люди, объясните как это сделать, нужно ли использовать фифо, лифо или что другое?
отпишитесь, пожалуйста
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
21.11.2013, 00:06     Абстрактный тип данных #4
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
в котором вставка и удаление происходят с обоих концов
но не пользуйтесь указателем на хвост списка...
вообще, в Л2-списке можно вставлять до указателя и за указателем, а сам указатель перемещать
такой список в любой позиции указателя представляет собой два полноценных стека, соединённых вместе: левый и правый
lemegeton
2916 / 1345 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
21.11.2013, 19:09     Абстрактный тип данных #5
Это код на С, судя по разделу, вам нужен код на С++. С классом и все такое...
А да, этот код-таки использует указатель на конец списка.
p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
22.11.2013, 03:31  [ТС]     Абстрактный тип данных #6
так это код на С..(
ну спасибо хоть за это!)
Yandex
Объявления
22.11.2013, 03:31     Абстрактный тип данных
Ответ Создать тему
Опции темы

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