Тор
1

Стек: Переместить все элементы из первого стека во второй и вывести адрес новой вершины стека

13.05.2012, 19:26. Показов 3332. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Даны указатели P1 и P2 на вершины двух непустых стеков. Переместить все элементы из первого стека во второй (в результате элементы первого стека будут располагаться во втором стеке в порядке, обратном исходному) и вывести адрес новой вершины второго стека. Операции выделения и освобождения памяти не использовать.
удачи!
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.05.2012, 19:26
Ответы с готовыми решениями:

Добавить элемент со значением D в стек и вывести адрес P2 новой вершины стека
Дано число D и указатель P1 на вершину непустого стека. Добавить элемент со значением D в стек и...

Подскажите как добавить элемент в стек и вывести адрес новой вершины стека
Dynamic3 . Дано число D и указатель P1 на вершину непустого стека. Добавить элемент со значением D...

Перемещать элементы из первого стека во второй, пока значение вершины первого стека не станет четным
Ребята помогите кто может... Даны указатели P1 и P2 на вершины двух непустых стеков. Перемещать...

Перемещать элементы из первого стека во второй, пока значение вершины первого стека не станет четным
Даны указатели P1 и P2 на вершины двух непустых стеков. Пе-ремещать элементы из первого стека во...

1
13107 / 5888 / 1707
Регистрация: 19.09.2009
Сообщений: 8,808
14.05.2012, 09:31 2
Лучший ответ Сообщение было отмечено как решение

Решение

Полностью задача по переливанию между стеками решается так:
Delphi
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
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils,
  Windows;
 
type
  //Тип основных данных.
  TData = Integer;
 
  //Указатель на элемент стека.
  TPElem = ^TElem;
  //Элемент стека.
  TElem = record
    Data : TData;
    PNext : TPElem;
  end;
 
//Добавление элемента на вершину стека.
procedure StackPush(var aPStack, aPElem : TPElem);
begin
  if aPElem = nil then Exit;
  aPElem^.PNext := aPStack;
  aPStack := aPElem
end;
 
//Изъятие элемента с вершины стека.
//Если стек не пуст, то с вершины стека изымается элемент и возвращается
//через параметр aPElem. В этом случае, функция возвращает значение True.
//Если стек пуст, то операция отменяется, а функция возвращает значение False.
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
  PElem : TPElem;
begin
  while StackPop(aPStack, PElem) do Dispose(PElem);
end;
 
//Распечатка стека.
procedure StackPrint(var aPStack : TPElem);
var
  PSt, PElem : TPElem;
  i : Integer;
begin
  if aPStack = nil then begin
    Writeln('Стек пуст.');
    Exit;
  end;
  //Начальная инициализация вспомогательного стека.
  PSt := nil;
  //Переливаем все элементы стека aPStack в стек PSt и выполняем распечатку.
  i := 0;
  while StackPop(aPStack, PElem) do begin
    StackPush(PSt, PElem);
    Inc(i);
    if i > 1 then Write(', ');
    Write(PElem^.Data);
  end;
  Writeln;
  //Возвращаем элементы из стека PSt в стек aPStack. При этом, элементы
  //в стеке aPStack окажутся в том же порядке, в каком они были до распечатки.
  while StackPop(PSt, PElem) do StackPush(aPStack, PElem);
end;
 
const
  //Количество элементов, с которым мы будем работать.
  M = 10;
var
  PSt1, PSt2, PElem : TPElem;
  i : Integer;
  S : String;
begin
  //Переключение окна консоли на кодовую страницу CP1251 (Win-1251).
  //Если после переключения русские буквы показываются неверно,
  //следует открыть системное меню консольного окна - щелчком мыши в левом
  //верхнем углу окна консоли и выбрать:
  //Свойства - закладка "Шрифт" - выбрать шрифт: "Lucida Console".
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
 
  //Начальная инициализация стеков.
  PSt1 := nil;
  PSt2 := nil;
 
  repeat
    //Формируем содержимое стека.
    Randomize;
    for i := 1 to M do begin
      New(PElem);
      PElem^.Data := Random(10); //0..9.
      StackPush(PSt1, PElem);
    end;
 
    //Распечатка стеков.
    Writeln('Первый стек:');
    StackPrint(PSt1);
    Writeln('Второй стек:');
    StackPrint(PSt2);
 
    //Переливаем все элементы стека PSt1 в стек PSt2.
    while StackPop(PSt1, PElem) do StackPush(PSt2, PElem);
 
    //Распечатка стеков.
    Writeln('Выполнено переливание из певого стека - во второй.');
    Writeln('Первый стек:');
    StackPrint(PSt1);
    Writeln('Второй стек:');
    StackPrint(PSt2);
 
    //Удаление стеков из памяти.
    StackFree(PSt1);
    StackFree(PSt2);
    Writeln('Работа завершена. Стеки удалёны из памяти.');
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
2
14.05.2012, 09:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2012, 09:31
Помогаю со студенческими работами здесь

Извлечь из стека первый (верхний) элемент и вывести его значение D, а также адрес P2 новой вершины стека
Дано указатель P1 на вершину непустого стека. Извлечь из стека первый (верхний) элемент и вывести...

Переместить все элементы из первого стека во второй
дано указатели Р1 и Р2 на вершины двух непустых стеков. Переместить все элементы из первого стека...

Переместить все элементы из первого стека во второй
Даны указатели P1 и P2 на вершины двух непустых стеков. Переместить все элементы из первого стека...

Дан указатель P1 на вершину стека (если стек пуст, то P1 = nil). Извлечь из стека все элементы и вывести их значения
Динамические структуры данных Все числа, используемые в заданиях на динамические структуры...


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

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

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