- •1.2Типы данных
- •1.2.1Объявление переменной
- •1.2.2Категории типов данных
- •1.2.3Целый тип данных
- •1.2.4Данные с плавающей точкой (вещественные типы)
- •1.3Знаки операций
- •1.3.3Простое присваивание
- •1.3.4Составное присваивание
- •1.3.5Приоритеты операций и порядок вычислений
- •1.4Структура и компоненты программы на языке си
- •1.5Организация ввода-вывода в стиле си
- •1.6.1 Манипуляторы и форматирование ввода-вывода
- •1.7Математические функции
- •2Алгоритм. Элементы структурного программирования
- •2.1Понятие алгоритма
- •2.2Основные требования к алгоритмам
- •2.3Элементы структурного программирования
- •3Программирование алгоритмов линейной структуры
- •4Алгоритмы и программы ветвящейся структуры. Условный оператор if. Переключатель switch
- •4.1Алгоритмы и программы ветвящейся структуры
- •4.1.1Условный оператор if
- •If (выражение) оператор1;
- •4.1.2Логические операции
- •4.2Примеры составления алгоритмов и программ с использованием условного оператора If
- •4.3Переключатель switch
- •5Алгоритмы и программы циклической структуры
- •5.1 Понятие цикла. Разновидности циклов
- •5.3Оператор while
- •5.4Оператор do while
- •5.5Оператор continue
- •6Регулярные типы данных. Массивы
- •6.1 Понятие регулярного типа
- •6.2Алгоритмы сортировки массивов
- •6.3 Постановка задачи сортировки и методы её решения
- •6.4Алгоритм прямого упорядочения (Алгоритм сортировки выбором элемента)
- •6.5Алгоритм попарного сравнения соседних элементов («пузырьковая» сортировка)
- •6.6Алгоритм сортировки выбором элемента
- •6.7Методы доступа к элементам массивов, использование указателей
- •6.8Организация многомерных массивов. Указатели на многомерные массивы
- •7.1Описание и определение функции
- •7.2Вызов функции
- •7.3Передача параметров в функцию
- •7.4Описание прототипа функции
- •7.5Функция с переменным количеством параметров
- •7.6Понятие сигнатуры функции
- •7.7Подставляемые (встраиваемые) функции
- •7.8Передача параметров в главную функцию
- •7.9Рекурсивные вызовы функции
- •7.10Примеры составления функций
- •8Указатели
- •8.1Понятие указателя
- •8.2Инициализация указателей
- •8.3Операции с указателями
- •8.4Ссылки
- •9Структуры (struct)
- •10Динамические структуры данных
- •3.1 Односвязные списки
- •Д обавление в начало списка.
- •2 ) Добавление в середину списка.
- •У даление первого элемента списка.
- •3 )Удаление элемента из середины списка.
- •Int Data; //поле данных
- •If (!q) //...И он первый в списке
- •3.2 Стек
- •3.3 Очередь
- •11Динамические массивы
- •12Функции и массивы
- •13Указатели на функции
- •14.1Файловый ввод/вывод с помощью потоков
- •14.2 Дополнительные функции файлового ввода/вывода
- •14.3Режимы файлов
- •14.4 Двоичные файлы
- •14.5Произвольный доступ к файлам
- •Список использованных источников
If (!q) //...И он первый в списке
{
DelFirst(First);
p = First; //p снова установить на начало
}
else //...а если он не первый в списке
{
DelAfter(q);
p = q;
}
else
{
q = p;
p = p->Next; //идем по списку
}
}
void main()
{
PNode First = NULL;
InputList(First);
PrintList(First);
cout<<"Введите значение для вставки: ";
int Data;
cin>>Data;
FindIns(First, Data);
PrintList(First);
cout<<"Введите значение для удаления: ";
cin>>Data;
FindDel(First, Data);
PrintList(First);
}
3.2 Стек
С тек – структура данных с односторонним доступом (рисунок 3.6). Стек является одной из наиболее употребляемых структур данных, которая оказывается весьма удобной при решении различных задач.
Стек работает по принципу LIFO (Last in – first out; последним пришел – первым ушел).
Особенностью стека является то, что в каждый момент времени доступен только один элемент, который находится в конце стека – вершине стека (Top).
Операции над стеками:
Занесение элемента в стек – Push
Выборка элемента из стека – Pop
Определение пустоты стека – Empty
Прочтение элемента без его выборки из стека – StackTop
Запись элемента – PutItem
При «добавлении элемента» новое значение добавляется в конец стека. При выполнении операции «взять элемент» – извлекается из него. Операции «прочитать элемент» и «записать элемент» работают с вершиной стека. Операции Push и Pop соответствуют операциям добавления и удаления первого элемента списка соответственно.
При выполнении операции выборки из стека целесообразно осуществить проверку на пустоту стека.
Пример реализации и работы со стеком.
В данном примере реализованы основные операции работы со стеком целых чисел. В основной программе происходит заполнение стека, затем извлечение и вывод его элементов на экран.
#include <iostream.h>
//описание структуры элемента стека
struct Element
{
int Item;
Element* Next;
};
//указатель на вершину стека
Element* TopPointer;
//проверка стека на пустоту
int IsEmpty()
{
return (!TopPointer);
}
//чтение вершины без ее извлечения из стека
void Get(int& Item)
{
if (!TopPointer)
cout<<"Стек пуст!\n";
else
Item = TopPointer->Item;
}
//изменение значения вершины без ее извлечения из стека
void Put(int Item)
{
if (!TopPointer)
cout<<"Стек пуст!\n";
else
TopPointer->Item = Item;
}
//добавление элемента в стек
//(аналогично вставке в начало списка)
void Push(int Item)
{
Element* temp; //временный указатель
temp = new Element;
temp->Item = Item;
temp->Next = TopPointer;
TopPointer = temp;
}
//извлечение элемента из стека
//(аналогично удалению из начала списка)
void Pop(int& Item)
{
if (!TopPointer)
cout<<"Стек пуст!\n";
else
{
Element* temp; //временный указатель
Item = TopPointer->Item;
temp = TopPointer->Next;
delete TopPointer; //освобождение памяти
TopPointer = temp;
}
}
void main()
{
int i;
//заполнение стека
do
{
cout<<"Введите элемент (0 - конец ввода): ";
cin>>i;
if (i!=0)
Push(i);
}
while (i!=0); //до тех пор, пока не введен 0
//печать стека
while (!IsEmpty())
{
Pop(i);
cout<<i<<' ';
}
}