Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<iomanip>
- using namespace std;
- struct double_list
- {
- int data;
- double_list* next;
- double_list* prev;
- };
- void push(double_list** head, double_list** tail, int element)
- {
- double_list* q = new double_list();
- q->next = NULL;
- q->prev = NULL;
- q->data = element;
- if (*head == NULL)
- {
- *head = *tail = q;
- }
- else
- {
- q->prev = *tail;
- (*tail)->next = q;
- *tail = q;
- }
- }
- void print_from_head_or_tail(double_list* top)
- //точка входа выбирается исходя из того что мы передаем/либо хвост/либо голова
- {
- if (top != NULL)
- {
- if (top->prev == NULL)
- {
- while (top != NULL)
- {
- cout << setw(5) << top->data;
- top = top->next;
- }
- cout << endl;
- }
- else
- {
- while (top != NULL)
- {
- cout << setw(5) << top->data;
- top = top->prev;
- }
- cout << endl;
- }
- }
- }
- void delete_double_list(double_list** head)
- {
- double_list* q;
- while (*head != NULL)
- {
- q = *head;
- *head = (*head)->next;
- delete q;
- }
- }
- double_list* find_max(double_list* top,int &max_position)
- {
- double_list* max=top;
- top=top->next;
- int posititon=0;
- while(top!=NULL)
- {
- posititon++;
- if(top->data>max->data){
- max_position=posititon;
- max=top;
- }
- top=top->next;
- }
- return max;
- }
- double_list* find_min(double_list* top,int &min_position)
- {
- double_list* min=top;
- top=top->next;
- int posititon=0;
- while(top!=NULL)
- {
- posititon++;
- if(top->data<min->data){
- min_position=posititon;
- min=top;
- }
- top=top->next;
- }
- return min;
- }
- void delete_elements(double_list*head,double_list*tail)
- {
- // 0( 1 2 3 )4 удаляем то что в скобках
- double_list* q=head->next;
- double_list* top=head->next;
- while(top!=tail)
- {
- q=top;
- top=top->next;
- delete q;
- }
- head->next=tail;
- tail->prev=head;
- }
- void delete_elements_Between_MAX_MIN(double_list*& top_main)
- {
- //проверка если double_list пуст
- if(top_main==NULL){
- cout<<"ваш стек пуст! некорректный ввод данных "<<endl;
- exit(1);
- }
- //сделаем проверки на то если у нас в стеке //только 1 элемент или все элемента одинаковые
- //так с такими входными данными прога отработае коряво
- if(top_main->next==NULL) {
- cout<<"введите больше чем только один элемент!!!! некорректный ввод данных "<<endl;
- exit(1);
- }
- if(top_main->next->next==NULL){
- cout<<"введите больше чем только 2 элементa!!!! некорректный ввод данных"<<endl;
- exit(1);
- }
- int max_position=0, min_position=0;
- double_list* top=top_main;
- double_list* max=find_max(top, max_position);
- double_list* min=find_min(top, min_position);
- //проверка если у нас все элементы одинаковые в списке
- if(max->data==min->data){
- cout<<"все элементы одинаковые!//удаление не может быть выполненно!";
- exit(1);
- }
- int n=max_position-min_position; //смотрим расположение max/min в списке
- if(n==1 || n==-1){
- cout<<"между max/min нет элементов";
- exit(0);
- }
- else if(n>1){ // head 5 0 6 7 12 tail -> next
- delete_elements(min,max);
- }
- else if(n<-1){
- delete_elements(max, min);
- }
- }
- int main()
- {
- double_list* head = NULL;
- double_list* tail = NULL;
- int n;
- cout << "Write kolvo of elements: ";
- cin >> n;
- cout << "Elements: ";
- int m;
- for (int i = 0; i < n; i++)
- {
- cin >> m;
- push(&head, &tail, m);
- }
- print_from_head_or_tail(head);
- //передаем только голову//так иначе все пойдем не по плану!
- delete_elements_Between_MAX_MIN(head);
- print_from_head_or_tail(head);
- delete_double_list(&head);
- }
Add Comment
Please, Sign In to add comment