Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Uchebnoe_posobie_dn_PYaVU_SI_15_nach2.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
4.24 Mб
Скачать

Пример программы

Пример №1

//Демонстрация работы со стеком

//Многофайловый проект

//Основной файл STEK_MOD.CPP

//

#include <iostream.h>

#include "MODUL_ST.H"

//main__Begin__________________________________________________________

int main()

{stek* head ;

t_elem ch ;

head = init_stek() ; //инициализируем стек

view_stek(head) ;

cout << "\n Вводите элементы стека сплошной строкой;"

"\n в конце - точка:" << endl ;

cin >> ch ;

while(ch != '.')

{head = push_stek(ch, head) ;

cin >> ch ;

}

cin.get() ;

cout << " Исходное содержимое стека:" << endl ;

if(!pu_stek(head)) view_stek(head) ;

else {cout << "Стек пуст. Нажмите Enter->" ; cin.get() ;

return(0) ;

}

//Извлекаем первый элемент

if(!pu_stek(head)) head = pop_stek(head, ch) ;

else {cout << "Стек пуст. Нажмите Enter->" ; cin.get() ;

return(0) ;

}

//Извлекли

cout << "\n Извлекли: " << ch << endl ;

//Осталось в стеке

cout << " Осталось:" << endl ;

if(!pu_stek(head)) view_stek(head) ;

else {cout << "Стек пуст. Нажмите Enter->" ; cin.get() ;

return(0) ;

}

cout << "\n Демонстрация закончена. Нажмите Enter->" ; cin.get() ;

return(0) ;

}

//main__End____________________________________________________________

//Заголовочный файл MODUL_ST.H

//Определение типов

typedef char t_elem ; //тип информационной части элемента стека

struct stek //тип элемента стека

{t_elem data ; //поле данных

stek* link ; //поле адреса

} ;

//Объявления (прототипы) функций

stek* init_stek() ; //инициализация стека

int pu_stek(stek*) ; //проверка стека на пустоту

stek* push_stek(t_elem, stek*) ; //добавление элемента в стек

stek* pop_stek(stek*, t_elem&) ; //извлечение элемента из стека

void view_stek(stek*) ; //вывод содержимого стека

//Исходный файл модуля работы со стеком MODUL_ST.CPP

//Содержит определения функций для работы со стеком

//

#include <iostream.h>

#include "MODUL_ST.H"

//view_stek__Begin________________________________________________________

//Просмотр содержимого стека

void view_stek(stek* head)

{stek* tec = head ;

while(!pu_stek(tec))

{cout << tec->data ;

tec = tec->link ;

}

return ;

}

//view_stek__End__________________________________________________________

//push_stek__Begin________________________________________________________

//Занесение нового элемента в стек

stek* push_stek(t_elem ch, stek* head)

{stek* nov = new(stek) ; //выделяем память под элемент стека

nov->data = ch ; //заполняем поля

nov->link = head ;

head = nov ; //указатель на начало стека

return(head) ;

}

//push_stek__End__________________________________________________________

//pop_stek__Begin_________________________________________________________

//Извлечение элемента из стека

stek* pop_stek(stek* head, t_elem& ch)

{stek* tec = head->link ;

ch = head->data ; //копируем информационную часть головного элемента

delete(head) ; //освобождаем память

return(tec) ;

}

//pop_stek__End___________________________________________________________

//init_stek__Begin________________________________________________________

//Инициализация стека

stek* init_stek()

{return(NULL) ; //в исходном состоянии стек пуст

}

//init_stek__End__________________________________________________________

//pu_stek__Begin__________________________________________________________

//Проверка стека на пустоту

int pu_stek(stek* head)

{return(head == NULL) ; //стек пуст - 0

//стек не пуст - не 0

}

//pu_stek__End____________________________________________________________

Пример №2

//Демонстрация работы с очередью

//Многофайловый проект

//Основной файл OCHER_MO.CPP

//

#include <iostream.h>

#include "mod_oche.h"

//main__Begin_____________________________________________________________

int main()

{ocher* o_beg,

* o_end ;

t_elem ch ;

init_ocher(&o_beg, &o_end) ; //инициализируем очередь

cout << "\n Вводите элементы очереди сплошной строкой;"

"\n в конце - точка:" << endl ;

cin >> ch ;

while(ch != '.')

{add_ocher(ch, &o_beg, &o_end) ;

cin >> ch ;

}

cin.get() ;

cout << " Исходное содержимое очереди:" << endl ;

if(!pu_ocher(o_beg)) view_ocher(o_beg) ;

else {cout << " Очередь пуста. Нажмите Enter->" ; cin.get() ;

return(0) ;

}

//Извлекаем первый элемент

if(!pu_ocher(o_beg)) o_beg = del_ocher(o_beg, ch) ;

else {cout << " Очередь пуста. Нажмите Enter->" ; cin.get() ;

return(0) ;

}

//Извлекли

cout << "\n Извлекли: " << ch << endl ;

//Осталось в очереди

cout << " Осталось:" << endl ;

if(!pu_ocher(o_beg))

view_ocher(o_beg) ;

else {cout << " Очередь пуста. Нажмите Enter->" ; cin.get() ;

return(0) ;

}

cout << "\n Демонстрация закончена. Нажмите Enter->" ; cin.get() ;

return(0) ;

}

//main__End_______________________________________________________________

//Модуль работы с очередью

//Заголовочный файл MOD_OCHE.H

//

//Объявления типов

typedef char t_elem ; //тип информационной части элемента очереди

struct ocher //тип элемента очереди

{t_elem data ; //поле данных

ocher* link ; //поле адреса

} ;

//Объявления (прототипы) функций для работы с очередью

void init_ocher(ocher**, ocher**) ; //инициализация очереди

int pu_ocher(ocher*) ; //проверка очереди на пустоту

void view_ocher(ocher*) ; //вывод содержимого очереди

void add_ocher(t_elem, ocher**, ocher**) ; //добавление элемента

ocher* del_ocher(ocher*, t_elem&) ; //удаление элемента из очереди

//_______________________________________________________________________

//Исходный файл mod_oche.cpp

//

#include <iostream.h>

#include "mod_oche.h"

//view_ocher__Begin_______________________________________________________

//Просмотр содержимого очереди

void view_ocher(ocher* o_beg)

{ocher* tec = o_beg ;

while(!pu_ocher(tec))

{cout << tec->data ;

tec = tec->link ;

}

return ;

}

//view_ocher__End_________________________________________________________

//add_ocher__Begin________________________________________________________

//Занесение нового элемента в очередь

void add_ocher(t_elem ch, ocher** o_beg, ocher** o_end)

{ocher* nov = new(ocher) ; //выделяем память под элемент очереди

nov->data = ch ; //заполняем поля

nov->link = NULL ;

if(pu_ocher(*o_beg)) *o_beg = nov ; //если очередь пуста меняем адрес головы

else (*o_end)->link = nov ; //подсоединяем новый элемент

*o_end = nov ; //указатель на последний элемент очереди

return ;

}

//add_ocher__End__________________________________________________________

//del_ocher__Begin________________________________________________________

//Извлечение элемента из очереди

ocher* del_ocher(ocher* o_beg, t_elem& ch)

{ocher* tec = o_beg->link ; //меняем адрес головы

ch = o_beg->data ; //копируем информационную часть головного элемента

delete(o_beg) ; //освобождаем память

return(tec) ; //возвращаем новый адрес головы

}

//del_ocher__End__________________________________________________________

//init_ocher__Begin_______________________________________________________

//Инициализация очереди

void init_ocher(ocher** o_beg, ocher** o_end)

{*o_beg = NULL ; //в исходном состоянии очередь пуста

*o_end = NULL ;

return ;

}

//init_ocher__End_________________________________________________________

//pu_ocher__Begin_________________________________________________________

//Проверка очереди на пустоту

int pu_ocher(ocher* o_beg)

{return(o_beg == NULL) ; //очередь пуста - 0

//очередь не пуста - не 0

}

//pu_ocher__End___________________________________________________________

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]