- •Федеральное государственное учреждение
- •©Российская таможенная академия, 2008
- •Ростовский филиал
- •© Крицкий с.П.
- •Содержание
- •Введение
- •Основные понятия программирования
- •Классификация языков программирования
- •Характеристика систем программирования на языкахJavaScript/Jscript
- •Типы значений в языкеJavaScript
- •Числовые литералы и значения и их организация в памяти Литералы целых чисел
- •Литералы вещественных чисел (чисел с плавающей точкой)
- •Логические литералы и значения и их организация в памяти
- •Строковые литералы, значения и их организация в памяти
- •Массивы и их организация в памяти. Многомерные массивы, матрицы
- •Записи и их организация в памяти
- •Операции над различными типами данных
- •Арифметические операции
- •Строковые операции
- •Логические операции
- •Операции сравнения
- •Операции выборки
- •Переменные, выражения, условия Переменные
- •Выражения
- •Вызовы функций и методов
- •Порядок вычисления выражения
- •Операции присваивания
- •Автоматическое преобразование типов значений. Функции преобразования и проверки типов
- •Ввод и вывод значений
- •Понятие оператора. Простые и составные операторы. Блок-схемы программ и модулей Операторы и модули
- •Блок-схемы
- •Составные операторы (последовательность, условные). Их синтаксис, блок-схемы и правила выполнения Последовательность операторов
- •Условный операторif … else
- •Операторы цикла (while, do-while и for). Их синтаксис, блок-схемы и правила выполнения. Операторыbreakиcontinue Оператор циклаwhile
- •Операторbreak
- •Операторcontinue
- •Оператор циклаdo…while
- •Оператор циклаfor
- •Функции. Определение и вызов. Выход из функцииreturn. Массив аргументовarguments Определение функции – операторfunction
- •Выход из функции – операторreturn
- •Определение переменной – операторvar
- •Отладка программ. Трассировка, отладочная печать. Тестирование программы
- •Основные понятия объектного подхода
- •ОбъектMath, назначение, свойства, методы. Значения NaN, Infinity, null, undefined.
- •Свойства объектаMath– константы:
- •Методы объекта Math
- •Специальные константы
- •Массивы как объекты в языкеJavaScript. Конструкторы, свойства и методы массивов. Задача копирования массива вJavaScript
- •Конструктор объектов типаArray
- •Свойство объектов типаArray
- •Методы объектов типаArray
- •Типичные задачи с массивами: линейная алгебра
- •Скалярное произведение векторов
- •Произведение матриц
- •Транспонирование квадратной матрицы
- •Типичные задачи с массивами: сортировка. Сортировка вставками. Методsort
- •Сортировка вставками
- •Методsort
- •Типичные задачи с массивами: поиск. Двоичный поиск в упорядоченном массиве
- •Обработка строк. Конструкторы, свойства, методы строк
- •Конструктор объектов типаString
- •Свойство объектов типаString
- •Методы объектов типаString
- •Шаблоны и регулярные выражения. Их использование методами строк.
- •Простые шаблоны
- •Составные шаблоны
- •Пользовательский интерфейс программ. Общее понятие
- •Html-страница как средство интерфейса для программ на языкеJavaScript. Тэги и атрибутыHtml
- •ОбъектыHtml-страниц иWeb-браузера, их свойства и методы. События и их обработка Объектные модели
- •Объекты страницы
- •Объекты браузера
- •СтилиHtml-объектов. Свойства позиционирования объектов страницы
- •Таймеры, примеры использования
- •Понятие ссылочной структуры данных. Односвязный список. Запись списков с помощью литералов.
- •Понятие стека. Функции для стека
- •Двухсвязный список, его структура
- •Понятие очереди и дека, их организация
- •Понятие дерева как ссылочной структуры. Бинарные деревья. Представление дерева литералом
- •Обработка деревьев. Рекурсия
- •Обход дерева «в глубину»
- •Обход дерева «в ширину»
- •Файлы и файловая система
- •Работа с текстовыми файлами
- •Объекты типа TextStream
- •Управление файлами и папками
- •Коллекции дисков, папок и файлов
- •Технология и методология создания программ
- •Жизненный цикл программы
- •Организация процесса разработки
- •Методологии проектирования программ
- •Заключение
- •Приложение 1. Теги, атрибуты и соответствующие свойства Общая структура html-документа
- •Форматирование текста
- •Вставка графики
- •Гиперссылки и карты
- •Приложение 2. События вHtmLи их источники
- •Приложение 3. Атрибуты и свойства стилейCss
- •Приложение 4. Работа с файловой системой вJScript
- •Свойства, методы и коллекции объектов файловой системы
- •Список литературы
- •Словарь терминов
- •If (условие) оператор1 [else оператор2]
- •Основы программирования
Понятие очереди и дека, их организация
Очередью (англ. Queue) называется последовательность, удалять из которой можно только первый элемент, а добавлять только после последнего. Эта хорошо известная во многих областях жизни структура имеет специальную аббревиатуру FIFO (First In – First Out, Первый войдёшь – первый выйдешь). Очередь хорошо реализуется двухсвязным списком. Рассмотрим функции создания очереди из массива createQue, включения в очередь inQue и удаления из очереди outQue.
function createQue(A)
{return toList2(A)
};
function outQue(D)
{return delNext2(D,D)
};
function inQue(E, D)
{if (D.last==null) insAfter2(E,D,D)
else insAfter2(E,D.last,D)
}
Дек – это последовательность, для которой удаление и вставка элементов возможна с обоих концов (deque – double-ended queue, очередь с двумя концами). Дек также хорошо реализуется двухсвязным списком. Функции для этих операций нетрудно написать аналогично приведенным выше функциям для очередей.
Понятие дерева как ссылочной структуры. Бинарные деревья. Представление дерева литералом
Деревом называется такая ссылочная структура, в которой на каждый объект может ссылаться только один, другой объект. Объекты дерева называются обычно узлами или вершинами. Узел, на который нет ссылок, называется корнем дерева. Узлы, которые не ссылаются на другие узлы, называются листьями. В программировании деревья рисуют, как правило, корнем вверх. Принято также говорить, что ссылка ведёт от родительского узла к дочернему. В этом смысле узлы могут быть потомками и предками других узлов, причём у каждого узла (кроме корня) ровно один родительский узел.
Примером простейшего дерева является односвязный список (у каждого родительского узла только один дочерний узел). Двухсвязный список деревом не является. Если в объектной модели HTML-страницы рассматривать только ссылки от родителей к детям, то получится дерево. Но реально DOM содержит ещё производные ссылки от младшего брата к старшему и от сына к отцу. Поэтому DOM можно считать деревом лишь условно.
Дерево называется бинарным, если у каждого родительского узла не более двух дочерних. Бинарные деревья очень часто используются в программистской практике. Каждый узел бинарного дерева имеет два поля, содержащих ссылки на дочерние узлы. Если дочернего узла нет, вместо ссылки поле содержит значение, не являющееся ссылкой, например null.
Дерево может иметь дескриптор, ссылающийся на корень, если нужно динамически добавлять и удалять узлы (аналогично односвязному списку). Здесь такие операции не рассматриваются, поэтому дескриптор не понадобится.
Примером бинарного дерева является генеалогическое дерево человека. Пусть каждый узел представлен записью
{man: сведения_о_человеке, f: его_отец, m: его_мать}
Поля f и m содержат ссылки на узлы родителей человека. Если какой-то из родителей неизвестен, вместо ссылки в соответствующем поле будет null. Любое дерево может быть записано на языке JavaScript в виде литерала-записи. Например:
{man: "Иван",
f: {man: "Пётр",
f: {man: "Павел",
f: {man: "Алексей",
f: null,
m: null},
m: null},
m: {man: "Мария",
f: null,
m: null}},
m: {man: "Ирина",
f: null,
m: {man: "Елена",
f: null,
m: null}}}
Графическое изображение этого дерева может быть таким, как на рис. 10. В нём имена ссылочных полей записаны прямо на стрелках. Если это не приводит к путанице (при определённых соглашениях), имена полей можно и не приводить.

Рис. 10. Бинарное генеалогическое дерево.
