3. Перенести из созданного списка в новый список все элементы, находящиеся между вершиной и элементом с минимальным значением. Оконный режим. //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop
//--------------- Функция добавления элемента в Стек ------------------------ Stack* InStack(Stack *p, int in) { Stack *t = new Stack; t -> info = in; t -> next = p; return t; } //----------------- Функция просмотра Стека---------------------------------- void View(Stack *p) { Stack *t = p; while( t != NULL) { Form1->Memo1->Lines->Add(" " + IntToStr( t->info)); t = t -> next; } } //----------------------- Функция освобождения памяти ----------------------- void Del_All(Stack **p) { while(*p != NULL) { t = *p; *p = (*p) -> next; delete t; } } void Sort_p(Stack **p) { Stack *t = NULL, *t1, *r; if ((*p) -> next -> next == NULL) return; do { for (t1=*p; t1-> next->next != t; t1=t1-> next) if (t1->next->info > t1-> next-> next-> info){ r = t1->next->next; t1 -> next -> next = r -> next; r-> next =t1-> next; t1-> next = r; } t= t1-> next; } while ((*p)-> next -> next != t); }
void Sort_info(Stack *p) { Stack *t = NULL, *t1; int r; do { for (t1=p; t1 -> next != t; t1 = t1-> next) if (t1-> info > t1-> next -> info) { r = t1-> info; t1-> info = t1-> next -> info; t1-> next -> info = r; } t = t1; } while (p -> next != t); }
void View_min(Stack *p) { Stack *t = p; int min; min = p->info;
while( p != NULL) { if((p->info)<min) min =p->info; p=p->next; } Form1->Memo1->Lines->Add("До минимального"); while( t->info != min) { Form1->Memo1->Lines->Add(" " + IntToStr( t->info)); t = t -> next; } }
//--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { int i, in, n = StrToInt(Edit1->Text); if(begin != NULL){ ShowMessage("Освободите память!"); return; } for(i = 1; i <= n; i++){ in = random(20); begin = InStack(begin, in); } Memo1->Lines->Add("Создали " + IntToStr(n) + " -ть."); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { int i, in, n = StrToInt(Edit1->Text); for(i = 1; i <= n; i++){ in = random(20); begin = InStack(begin, in); } Memo1->Lines->Add("Добавили " + IntToStr(n) + " -ть."); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { if(!begin){ ShowMessage("Стек Пуст!"); return; } Memo1->Lines->Add("--- Элементы ---"); View(begin); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button4Click(TObject *Sender) { if (begin != NULL) Del_All(&begin); ShowMessage("Память освобождена!"); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button5Click(TObject *Sender) { if(begin != NULL) Del_All(&begin); Close(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button7Click(TObject *Sender) { if(begin != NULL) Sort_p(&begin); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button8Click(TObject *Sender) { if(begin != NULL) Sort_info(begin); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button6Click(TObject *Sender) { if(begin != NULL) View_min(begin); } //--------------------------------------------------------------------------- Результат работы программы: Создание:
#pragma argsused struct Stack { // Декларация структурного типа int info; Stack * next; } *begin, *t; //------------ Декларации прототипов функций пользователя ---------- Stack* InStack(Stack*, int); void View(Stack*); void Del_All(Stack **); void Sort_p(Stack **); void Sort_info(Stack *); void View_min(Stack *); void main(int argc, char* argv[]) { int i, in, n, kod; while(true){ cout << "\n\tCreat - 1.\n\tAdd - 2.\n\tView - 3.\n\tDel - 4.\n\tSort1 - 5.\n\tSort2 - 6.\n\tInd_zad - 7.\n\tEXIT - 0. : " ; cin >> kod; switch(kod) { case 1: case 2: if(kod == 1 && begin != NULL){ // Если создаем новый стек, должны освободить память, занятую предыдущим cout << "Clear Memory!" << endl; break; } cout << "Input kol = "; cin >> n; for(i = 1; i <= n; i++) { in = random(20); begin = InStack(begin, in); } if (kod == 1) cout << "Create " << n << endl; else cout << "Add " << n << endl; break; case 3: if(!begin){ cout << "Stack Pyst!" << endl; break; } cout << "--- Stack ---" << endl; View(begin); break; case 4: Del_All(&begin); cout<<"Memory Free!"<<endl; break; case 5: if(begin != NULL) Sort_p(&begin); break; case 6: if(begin != NULL) Sort_info(begin); break; case 7: if(begin != NULL) View_min(begin); break; case 0: if(begin != NULL) Del_All(&begin); return; // Выход - EXIT } } } //--------------------------------------------------------------------------- //--------------- Функция добавления элемента в Стек ------------------------ Stack* InStack(Stack *p, int in) { Stack *t = new Stack; t -> info = in; t -> next = p; return t; } //----------------- Функция просмотра Стека---------------------------------- void View(Stack *p) { int c; Stack *t = p; while( t != NULL) { c = t->info; cout<<" "<<c<<endl; t = t -> next; } } //----------------------- Функция освобождения памяти ----------------------- void Del_All(Stack **p) { while(*p != NULL) { t = *p; *p = (*p) -> next; delete t; } } void Sort_p(Stack **p) { Stack *t = NULL, *t1, *r; if ((*p) -> next -> next == NULL) return; do { for (t1=*p; t1-> next->next != t; t1=t1-> next) if (t1->next->info > t1-> next-> next-> info){ r = t1->next->next; t1 -> next -> next = r -> next; r-> next =t1-> next; t1-> next = r; } t= t1-> next; } while ((*p)-> next -> next != t); }
void Sort_info(Stack *p) { Stack *t = NULL, *t1; int r; do { for (t1=p; t1 -> next != t; t1 = t1-> next) if (t1-> info > t1-> next -> info) { r = t1-> info; t1-> info = t1-> next -> info; t1-> next -> info = r; } t = t1; } while (p -> next != t); }
void View_min(Stack *p) { Stack *t = p; int min, c; min = p->info;
while( p != NULL) { if((p->info)<min) min =p->info; p=p->next; } cout<<"Do minimalnogo"<<endl; while( t->info != min) { c = t->info; cout<<" "<<c<<endl; t = t -> next; } } Результат работы программы: Создание стека: