Написать функции: - добавление элемента в начало двусвязного списка; - добавление элемента в конец двусвязного списка; - добавление элемента в любое место списка (в порядке возрастания); - удаление одного элемента; - удаление всего списка; - вывод списка на экран; - main(), демонстрирующая работу всех функций. Ниже приведена программа реализуящая эта задача. Однако немогу с ней разобраться. Хотелось бы чтобы вы дали подробное описание функционирования(по возможности прописать комментарии) с того места где я пометил что нуждаюсь в комментариях. | Код | #include <stdafx.h> #include <stdlib.h> #include <stdio.h> #include <iostream> #include <conio.h> using namespace std;
struct bibl { char nazv[20]; char autor[20]; int god; bibl *p; bibl *n;
};
int en=0; bibl *start=0,*end=0;
void add_s() { bibl *card=new (bibl); cout<<"vvedi nazv book -> "; cin.getline (card->nazv,20); cout<<"vvedi autor book -> "; cin.getline (card->autor,20); cout<<"vvedi god -> "; cin>>card->god; cin.ignore(); cout<<'\n';
if(start==0) { start=card; end=card; card->p=0; card->n=0; return; } card->p=0; card->n=start; start->p=card; start=card; }
void add_e() { bibl *card=new (bibl); cout<<"vvedi nazv book -> "; cin.getline (card->nazv,20); cout<<"vvedi autor book -> "; cin.getline (card->autor,20); cout<<"vvedi god -> "; cin>>card->god; cin.ignore(); cout<<'\n';
if(start==0) { start=card; end=card; card->p=0; card->n=0; return; } end->n=card; card->p=end; end=card; card->n=0; }
void add_o() { bibl *card=new (bibl); cout<<"vvedi nazv book -> "; cin.getline (card->nazv,20); cout<<"vvedi autor book -> "; cin.getline (card->autor,20); cout<<"vvedi god -> "; cin>>card->god; cin.ignore(); cout<<'\n';
if(start==0) { start = card; end = card; card->p = 0; card->n = 0; return; } if(card->god <= start->god) { card->n = start; start->p = card; card->p = 0; start = card; return; } if(card->god > end->god) { card->n = 0; end->n = card; card->p = end; end = card; return; }
bibl *p,*p2; p=start;//нуждаюсь в комментариях p2=start->n;//нуждаюсь в коммнтарияз
while (!(card->god > p->god && card->god <= p2->god)) { p=p2; p2=p2->n; } p->n=card; card->n=p2; p2->p=card; card->p=p; }
void del_b() { int god; bibl *p = start,*p2=start->n;
cout << "Vvedi god -> "; cin >> god;
if(start== 0) return;
if(start == end) { if(start->god == god) { delete start; start = 0; end = 0; return; } } if(start->god == god) { start=start->n; delete p; return; }
while (p2!=0) { if(p2->god==god) { p->n=p2->n; delete p2; return; } p=p2; p2=p2->n; } return; }
void del() { bibl *p=start; while (p!=0) { p=p->n; delete(start); start=p; } }
void print_s() { bibl *p; p=start;
while (p!=0) { cout<<'\n'; cout<<"nazv book -> "<<p->nazv; cout<<'\n'; cout<<"autor book -> "<<p->autor; cout<<'\n'; cout<<'\n'; cout<<"god -> "<<p->god; cout<<'\n';
p=p->n; cout<<'\n'; } }
void menu() { cout<<"1: Dobavlenie v nachalo"; cout<<'\n';
cout<<"2: Dobavlenie v end"; cout<<'\n';
cout<<"3: Dobavlenie v other"; cout<<'\n';
cout<<"4: Vivod Bcex knig -> "; cout<<'\n';
cout<<"5: Delete one knig"; cout<<'\n';
cout<<"6: Delete all knig"; cout<<'\n';
cout<<"0: EXIT"; cout<<'\n'; }
int main(int argc, _TCHAR* argv[]) { char ac; menu(); ac=getch(); while(true) {
switch(ac) { case '1': add_s(); menu(); break;
case '2': add_e(); menu(); break;
case '3': add_o(); menu(); break;
case '4': print_s(); menu(); break;
case '5': del_b(); menu(); break;
case '6': del(); menu(); break;
case '0': del(); return 0;
default: cout << "Habral NE to !!!"; cout<<'\n'; menu(); break; } } }
|
Также прошу написать функцию сортироовки динамического списка методом вставки. У меня есть программа сортировки ВЫБОРКОЙ(вроде) но мне надо сортировку вставкой. Пример сортировки: | Код |
#include "stdafx.h" #include <iostream> using namespace std;
int _tmain(int argc, _TCHAR* argv[]) { int a[10]; cout << "Bvedite masiv\n"; for (int i=0; i<10; i++) { cin >> a[i]; } cout << "neotsorterobano: "; for (int i=0; i<10; i++) { cout << a[i] << " "; } for (int i=1; i<10-1; i++) { int s = 0; for (int j=10-1; j>=i; j--) { if (a[j]<a[j-1]) { int tmp = a[j]; a[j] = a[j-1]; a[j-1] = tmp; s = 1; } } if (!s) break; } cout << "\n\nOtsorterovano: "; for (int i=0; i<10; i++) { cout << a[i] << " "; } cout << endl; return 0; }
|
Заранее благодарен.
|