0 / 0 / 1
Регистрация: 25.10.2011
Сообщений: 5
1

Переставить очередь, чтобы сначала расположились все ее неотрицательные члены, а потом — все отрицательные

27.10.2011, 09:43. Показов 2000. Ответов 1

Помогите написать код, пожалуйста!


Составить очередь, элементами которой являются действительные числа. Переставить ее члены так, чтобы сначала расположились все ее неотрицательные члены, а потом - все отрицательные. Порядок как среди неотрицательных членов, так и среди отрицательных должен быть сохранен прежним. Для временного хранения неотрицательных и отрицательных элементов использовать стеки. Значения элементов очереди до и после перестановки вывести на экран.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2011, 09:43
Ответы с готовыми решениями:

Дан массив A(n). Переставить все элементы сначала все неотрицательные потом отрицательные
дан массив A(n). Переставить элементы массива так, чтобы сначала расположились все неотрицательные...

Переставить члены последовательности так, чтобы сначала расположились все ее неотрицательные члены
Помогите пожалуйста решить задачу!!! Экзамен горит.... Выручайте!!! Дана очередь, элементами...

Переставить члены последовательности так, чтобы сначала расположились все ее неотрицательные члены
Помогите решить задачу! :cofee2: Дана очередь, элементами которой являются действительные числа....

Переставить члены последовательности так, чтобы сначала расположились все неотрицательные
Помогите пожалуйста. Задан массив действительных чисел. Переставить члены последовательности так,...

1
13089 / 5870 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
27.10.2011, 13:58 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Решение с очередью и стеками, реализованными на односвязанных динамических списках.
Pascal
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
program Project1;
 
type
  //Указатель на элемент очереди или стека.
  TPElem = ^TElem;
  //Элемент очереди или стека.
  TElem = record
    Data : Integer;
    PNext : TPElem;
  end;
  //Очередь.
  TQueue = record
    PFirst, PLast : TPElem;
  end;
 
//Очередь. Процедуры.
 
//Добавление элемента в конец очереди.
procedure QueuePush(var aQueue : TQueue; var aPElem : TPElem);
begin
  if aPElem = nil then Exit;
 
  aPElem^.PNext := nil;
  if aQueue.PFirst = nil then
    aQueue.PFirst := aPElem
  else
    aQueue.PLast^.PNext := aPElem
  ;
  aQueue.PLast := aPElem;
end;
 
//Изъятие элемента из начала очереди.
function QueuePop(var aQueue : TQueue; var aPElem : TPElem) : Boolean;
begin
  Result := False;
  if aQueue.PFirst = nil then Exit;
 
  aPElem := aQueue.PFirst;
  aQueue.PFirst := aPElem^.PNext;
  if aQueue.PFirst = nil then aQueue.PLast := nil;
  Result := True;
end;
 
//Удаление очереди из памяти (очистка очереди).
procedure QueueFree(var aQueue : TQueue);
var
  PDel : TPElem;
begin
  while QueuePop(aQueue, PDel) do Dispose(PDel);
end;
 
//Стек. Процедуры.
 
//Добавление элемента на вершину стека.
procedure StackPush(var aPStack, aPElem : TPElem);
begin
  if aPElem = nil then Exit;
  aPElem^.PNext := aPStack;
  aPStack := aPElem
end;
 
//Изъятие элемента с вершины стека.
function StackPop(var aPStack, aPElem : TPElem) : Boolean;
begin
  Result := False;
  if aPStack = nil then Exit;
  aPElem := aPStack;
  aPStack := aPElem^.PNext;
  Result := True;
end;
 
//Удаление стека из памяти (очистка стека).
procedure StackFree(var aPStack : TPElem);
var
  PDel : TPElem;
begin
  while StackPop(aPStack, PDel) do Dispose(PDel);
end;
 
const
  //Глубина очереди.
  M = 10;
var
  Q1 : TQueue;
  St1, St2, St3 : TPElem;
  PElem : TPElem;
  i : Integer;
  S : String;
begin
  //Инициализация очередей и стеков.
  Q1.PFirst := nil;
  Q1.PLast := nil;
  St1 := nil;
  St2 := nil;
  St3 := nil;
 
  repeat
    //Формируем очередь из случайных целых чисел.
    //И выполняем распечатку.
    Writeln('Исходная очередь:');
    Randomize;
    for i := 1 to M do begin
      New(PElem);
      PElem^.Data := -10 + Random(21); //-10..10.
      QueuePush(Q1, PElem);
      //Распечатка.
      if i > 1 then Write(', ');
      Write(PElem^.Data);
    end;
    Writeln;
 
    //Переписываем все элементы очереди в первый стек.
    while QueuePop(Q1, PElem) do StackPush(St1, PElem);
    //Из первого стека все неотрицательные элементы переписываем
    //во второй стек. А все отрицательные элементы - в третий стек.
    while StackPop(St1, PElem) do begin
      if PElem^.Data >= 0 then StackPush(St2, PElem)
      else StackPush(St3, PElem);
    end;
    //Теперь, переписываем в очередь сначала все элементы из второго стка
    //- это неотрицательные элементы. А затем в очередь переписываем все
    //элементы из третьего стека - это все отрицатльные элементы.
    while StackPop(St2, PElem) do QueuePush(Q1, PElem);
    while StackPop(St3, PElem) do QueuePush(Q1, PElem);
 
    //Распечатка элементов очереди после обработки.
    Writeln('Очередь после обработки:');
    i := 0;
    while QueuePop(Q1, PElem) do begin
      Inc(i);
      if i > 1 then Write(', ');
      Write(PElem^.Data);
    end;
    Writeln;
 
    //Удаление очередей и стеков из памяти.
    QueueFree(Q1);
    StackFree(St1);
    StackFree(St2);
    StackFree(St3);
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2011, 13:58
Помогаю со студенческими работами здесь

Массив: переставить элементы таким образом, чтобы сначала были записаны все положительные, затем все отрицательные, а потом все нули.
Здравствуйте! помогите пожалуйста с задачей по информатике. Буду очень благодарна) В массиве из...

Переставить элемента массива, так чтобы сначала было расположены все положительные элементы, потом все отрицательные
Всем добрый вечер! Есть задача: Кто знает как ее решить - помогите, с меня спасибо:)

*. В файле из вещественных чисел переставить элементы таким образом, чтобы сначала были записаны все положительные, затем все отрицательные, а потом
Помогите с задачей! Видел подобное решение в нижестоящей теме но оно слишком сложное желательно...

Дан массив а1,а2,,…,аn. Переставить его элементы так, чтобы в начале массива расположились все его неотрицательные элементы, а в конце – отрицательные
Помогите плиз написать программу: Дан массив а1,а2,,…,аn. Переставить его элементы так, чтобы в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru