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

Поместить в стек из динамического списка - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ определить время года по месяцу http://www.cyberforum.ru/cpp-beginners/thread130147.html
Помогите пожалуйста написать программу на С++ :по названию месяца определить сезон (время года), на который этот месяц приходится.
C++ Поменять местами строку и столбец матрицы Помогите с задачкой по с++ Разработать программу, которая в матрице размерности n*n меняет местами строку, содержащую элемент с минимальным значением, со столбцом, содержащим элемент с максимальным значением. Матрица размещается в памяти динамически, значение n вводится по запросу с клавиатуры. http://www.cyberforum.ru/cpp-beginners/thread130136.html
C++ Программа должна загнать в динамический массив структур...
Программа должна загнать в динамический массив структур (размерность вводится) имена, и годы выпуска машин. Прога не работает, не могу разобрать в чём дело... #include <iostream> using namespace std; int main() { int i,k; cout<<"Enter the amount of cars: __\b\b"; cin>>i; struct car {char name; int year;}; car * coll = new car;
Таблица с двумя индексами C++
Подскажите какой-нибудь пример реализации таблицы с двумя индексами, либо библиотеки. Например есть объект с свойствами Index1, Index2 #include <string> using namespace std; class AnyObject{ public: AnyObject(index1,index2,name); int Index1(); int Index2();
C++ Одномерный массив http://www.cyberforum.ru/cpp-beginners/thread130131.html
Помогите пожалуйста написать программу!!! Задан упорядоченный по убыванию целочисленный массив Х, вставить в массив Х некоторое число Н, сохранив упорядоченность массива. Найти cреднее арифметическое простых чисел в массиве после вставки числа и среднее геометрическое всех элементов массива.
C++ Написать программу, которая позволяет осуществить ввод 2-х матриц одинакового размера Помогите курсовик дали,помогите с началом программы: Написать программу, которая позволяет осуществить ввод 2-х матриц одинакового размера (размер может варьироваться) и выполнить следующие операции: - сложить введенные матрицы; подробнее

Показать сообщение отдельно
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
20.05.2010, 13:14     Поместить в стек из динамического списка
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
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#include <iostream>
using namespace std;
 
//Описание узла списка.
struct Node {
double d;
Node *next;
Node *prev;
Node():next(NULL),prev(NULL), d(-332215){}
Node(Node* ptr_n, Node *ptr_p , double data): next(ptr_n),prev(ptr_p), d(data) {}
};
 
//Функции для работы со списком.
//--------------------------------------------------------
Node * Create(double data);                  //создает список.
void add(Node**const pend , double data);    //добавить в конец списка.
double pop(Node**const pbeg);                //выборка  из начала списка.
//полная выборка.  
void Update(Node **const pbeg, Node **const pend ){ while(*pbeg)pop(pbeg); (*pend) = NULL; }       
void Show(Node *ptr); 
//--------------------------------------------------------
 
 
//Описание узла стека.
struct Stack {
double d;
Stack *next;
Stack(): next(NULL), d(-332215){}
Stack(Stack *ptr, double data): next(ptr), d(data){}
};
 
 
//-------------------------------------------------------------
//Для работы со стеком:
void push(Stack**const top, double data);      //положить на верщину стека.
double pop(Stack**const top);                  //выборка из стека.
void Show(Stack *ptr);                         //показать стек.
//очистить стек.
void Update(Stack **const top) { while(*top)pop(top);   }   
        
//---------------------------------------------------------------------------------------
long DeleteNegFromListANDFormStack(Node**const pbeg, Node **const pend, Stack**const top);
 
 
//Клиентская часть.
int main(){
 
Stack *top = NULL;      //на вершину стека.
 
Node *pbeg = NULL;      //на начало списка.
Node *pend = NULL;      //на конец  списка.
 
pend = Create(-200);      //создаем   список.
pbeg = pend;
 
 
int i = -10;
while(i++<10)add(&pend,i);
cout<<"Print List: ";Show(pbeg);
DeleteNegFromListANDFormStack(&pbeg,&pend,&top);
 
cout<<"Print List: ";Show(pbeg);
cout<<"Print Stack: ";Show(top);
 
Update(&top);           //memory free
Update(&pbeg,&pend);    //memore free
 
system("pause");        //что програ не закрывалась, сразу.
return 0;
}
 
//создает список.
Node * Create(double data){ Node *pv = new Node(NULL,NULL,data); ; return pv; }
 
//добавить в конец списка.
void add(Node**const pend , double data){
Node *pv = new Node(NULL,*pend,data);
(*pend)->next = pv; 
(*pend) = pv;
}
 
//выборка  из начала списка.
double pop(Node**const pbeg){
Node *tmp = (*pbeg);
if(tmp){
double d = tmp->d;
(*pbeg)=(*pbeg)->next;
delete tmp;
return d;
}
return -1;
}
 
 
 
/*выводить в зависимости от того: какой указатель передан: на конец или начало. для кольцевых не работает. */
void Show(Node *ptr){
if(ptr){
if((ptr->next==NULL)&&(ptr->prev==NULL))  {while(ptr){  cout<<ptr->d<<' '; ptr=ptr->prev;   } cout<<endl; return; }
//Выводим список с конца. если:
if((ptr->next == NULL)&&(ptr->prev!=NULL)){ while(ptr){ cout<<ptr->d<<' '; ptr=ptr->prev;   } cout<<endl; return; }
//Выводим сначала если
if((ptr->next != NULL)&&(ptr->prev==NULL)){ while(ptr){ cout<<ptr->d<<' '; ptr=ptr->next;   } cout<<endl; return; }
return ;
}
 
}
 
 
//положить на верщину стека.
void push(Stack**const top, double data){
    if(*top==NULL){
    Stack *pv = new Stack(NULL,data);
    (*top) = pv;
    return ;
    }
    else {
    Stack *pv= new Stack(*top,data);
    (*top) = pv;
    return ;
    }
}
 
 
//выборка из стека.
double pop(Stack**const top){
Stack * tmp = (*top);   
if(tmp){ double d = tmp->d; (*top)=(*top)->next; delete tmp; return d; }
return -1;
}
//показать стек.
void Show(Stack *ptr){ while(ptr){ cout<<ptr->d<<' '; ; ptr = ptr ->next; } cout<<endl;   }
 
 
 
 
long DeleteNegFromListANDFormStack(Node**const pbeg, Node **const pend, Stack**const top){
if((*pbeg)==NULL||(*pend)==NULL)return -1;
Node * temp = *pbeg;
 
//Если в списке только один узел.
if(temp->next==NULL&&temp->prev==NULL&&temp->d<0){
push(top,temp->d);
delete temp;
*pbeg = NULL;
*pend = NULL; 
return 2;
}
 
 
while(temp){
    if(temp->d<0){
        if(temp ==(*pend)){
        (*pend)=(*pend)->prev;
        (*pend)->next=NULL;
        }
 
    
        else if(temp ==(*pbeg)){
        (*pbeg)=(*pbeg)->next;
        (*pbeg)->prev=NULL;
        }
 
        else  {      
        (temp->prev)->next=temp->next;
        (temp->next)->prev=temp->prev;  }
  
        push(top,temp->d);
        delete temp;  
        temp = NULL; 
        temp = *pbeg; 
        continue;   
    }
temp=temp->next; 
}
 
 
 
 
 
return 0;
}
Должно работать.
В программу внес еще поправки небольшие.
 
Текущее время: 16:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru