- •Федеральное государственное учреждение
- •©Российская таможенная академия, 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]
- •Основы программирования
Понятие стека. Функции для стека
Стеком называется последовательность элементов, в которой добавлять и удалять можно только первый элемент. Первый элемент называется верхним, потому что английское stack означает кипу бумаг или штабель дров, где класть и брать можно только сверху. Другое название стека – магазин, по аналогии с магазином многозарядной винтовки или автомата, в котором пули заталкиваются и выталкиваются с одного конца. Популярность такой структуры проявляется в том, что для неё часто используется специальная аббревиатура LIFO (Last In – First Out, Последний войдёшь – первый выйдешь) или FILO (Первый войдёшь – последний выйдешь).
Программный стек хорошо реализуется односвязным списком, в котором вершина стека является головой списка. Стандартный набор операций для стека:
push – втолкнуть новый элемент в стек, протолкнуть пулю в магазин;
pop – вытолкнуть (удалить) элемент из стека, как пробку из бутылки;
top – скопировать верхний элемент стека, не удаляя его;
exchange – поменять местами два верхних элемента стека;
empty – проверить, пуст ли стек.
При желании этот набор можно расширить. Приведём функции, реализующие эти операции. В них Р – дескриптор списка, представляющего стека Е – новый элемент со свойством next.
function push(E, P)
{insAfter(E, P)
};
function pop(P) //выдаёт ссылку на удалённый элемент
{delNext(P)
};
function top(P) //выдаёт info верхнего элемента
//или null, если стек пуст
{if (P.next == null) return null;
return P.next.info
};
function exchange(P)
{if (P.next!=null && P.next.next!=null)
{var x = P.next.next;
P.next.next = x.next;
x.next = P.next;
P.next = x
}};
function empty(P)
{return (P.next == null)
}
Двухсвязный список, его структура
Двухсвязным называется список, в котором каждый элемент содержит ссылку next на следующий элемент и ссылку pred на предыдущий элемент. Структура двухсвязного списка представлена на рис. 9 (серым цветом выделен дескриптор списка).

Рис. 9. Представление списка (е1, е2, … еn) и пустого списка ( ).
Последний элемент списка не имеет следующего (next равно null), а первый – предыдущего (pred равно null). Дескриптором списка является запись с двумя полями next (ссылка на первый элемент списка) и last (ссылка на последний элемент списка). Обе ссылки равны null для пустого списка.
Одним литералом двухсвязный список записать невозможно. Но следующий простой код показывает, как построить двухсвязный список для конкретной последовательности. Построим список для последовательности (1, 2, 3):
x1={info:1, pred:null};
x2={info:2, pred:x1};
x3={info:3, pred:x2, next:null};
x1.next=x2; x2.next=x3;
d={next:x1, last:x3} //дескриптор списка
К двухсвязному списку можно применять все функции для работы с односвязными списками и стеками, но при удалении и вставке элементов структура ссылок pred и last нарушается. Поэтому для сохранения структуры двухсвязного списка соответствующие функции нуждаются в доработке.
function insAfter2(E,P,D) //D – дескриптор списка
{P.next = {info:E, next:P.next};
if (D == P) //вставка перед первым элементом
P.next.pred = null
else P.next.pred = P;
if (P.next.next != null) //E не последний
P.next.next.pred = P.next
else D.last = P.next //E последний
};
function delNext2(P, D)
{var r = P.next;
if (P.next != null) P.next = P.next.next;
if (P.next != null) P.next.pred = r.pred
else D.last = r.pred;
return r
};
function toList2(A)
{var r={next:null, last:null}, //дескриптор пустого списка
P=r;
for (var i=0; i<A.length; i++)
{insAfter2(A[i],P,r);
P = P.next};
return r
}
