Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <locale>
- using namespace std;
- //Стэк. Тип поля - *char . Добавить элемент с указанным номером.
- struct point{
- char* key;
- point* next;
- point *pred;//указатель на предыдущий элемент
- };
- void print_list(point* beg)
- //печать списка
- {
- point* p = beg;//начало списка
- while (p != 0)
- {
- cout << p->key << "\t";
- p = p->next;//переход к следующему элементу
- }
- }
- void print_list2(point* beg)
- //печать списка
- {
- point* p = beg;//начало списка
- while (p != 0)
- {
- cout << p->key << "\t";
- p = p->pred;//переход к следующему элементу
- }
- }
- point* make_point()
- //создание одного элемента
- {
- point*p = new(point);
- p->next = 0; p->pred = 0;//обнуляем указатели
- char s[50];
- cout << "\nEnter string:";
- cin >> s;
- p->key = new char[strlen(s) + 1];//выделение памяти под строку
- strcpy(p->key, s);
- return p;
- }
- point*make_list(int n)
- //создание списка
- {
- point *p, *beg;
- beg = make_point();//создаем первый элемент
- for (int i = 1; i<n; i++)
- {
- p = make_point();//создаем один элемент
- //добавление элемента в начало списка
- p->next = beg;//связываем р с первым элементом
- beg->pred = p;//связываем первый элемент с p
- beg = p;// p становится первым элементом списка
- }
- return beg;
- }
- point* add_point(point* beg, int k){
- point* p = beg;
- point* r = new point();
- int i = 1;
- if (k != 1){ //Когда указываем номер > 1
- while (p->next != NULL){ //Проходим до конца списка + ищем и запоминаем необходимый эл-т
- p = p->next;
- i++;
- if (i == k) r = p;
- }
- }
- else{ //Если указан номер 1
- r = beg;
- while (p->next != NULL) p = p->next;
- }
- point* nwp = new point(); //Создаём новый эл-т и копируем его значения из сохранённого эл-та
- nwp->key = r->key;
- nwp->next = NULL;
- nwp->pred = p; //Вставляем в конец
- p->next = nwp;
- return beg;
- }
- void main(){
- setlocale(LC_ALL, "rus");
- int n, k;
- bool flag = true;
- cout << "Введите кол-во элементов" << endl;
- cin >> n;
- point* beg = make_list(n);
- cout << "Исходный список : " << endl;
- print_list(beg);
- cout << endl;
- while (flag){
- cout << "Эл-т под каким номером добавляем? ";
- cin >> k;
- if (k > n || k < 1)cout << "Неверно указан номер" << endl;
- else flag = false;
- cout << endl;
- }
- cout << "Список после добавление элемента" << endl;
- cout << endl;
- beg = add_point(beg,k);
- print_list(beg);
- cout << endl;
- while (beg->next != 0){ beg = beg->next; }
- print_list2(beg);
- cout << endl;
- for (int i = 0; beg->next != 0; i++){
- beg = beg->next;
- delete beg->pred;
- }
- delete beg;
- }
Advertisement
Add Comment
Please, Sign In to add comment