- •Вопросы к экзамену по дисциплине
- •6. Типы данных: целый, вещественный, символьный. Размеры данных.
- •7.Правила определения переменных в программе. Инициализация переменных.
- •10.Операции сдвига.
- •11.Операции отношения, логические операции.
- •Int I, j, k;
- •15.Приоритет операций и порядок вычисления выражений.
- •16.Функция форматированного вывода printf.
- •18.Операторы преобразования данных и операторы управления. Оператор простой и составной, блок.
- •(Последовательно выполняемые операторы)
- •19.Виды управляющих конструкций программы.
- •20.Операторы ветвления, условный оператор.
- •21.Оператор переключения(Switch).
- •22.Оператор цикла с заданным числом повторений.
- •23.Оператор цикла с предусловием.
- •24.Оператор цикла с постусловием.
- •25.Операторы прерывания и продолжения цикла.
- •26.Одномерные и многомерные массивы, их инициализация.
- •27.Указатели. Связь между указателями и массивами.
- •28.Операции над указателями и массивами.
- •29.Операции взятия адреса, обращения по адресу.
- •30.Определение функции. Возвращение значения: оператор return. Описание функции, вызов функции.
- •31.Аргументы функции: формальные и фактические. Передача аргументов, стек.
- •32.Рекурсивные программы.
- •33.Функции для работы со строками: сравнение, копирование.
- •47. Функции для работы со строками: поиск в строке.
- •34.Функции для работы со строками: преобразование форматов.
- •35.Локальные и глобальные переменные.
- •36.Классы памяти. Автоматические переменные. Внешние и статические переменные.
- •37. Декларация структур.
- •38. Инициализация и доступ к элементам структуры.
- •39. Вложенные структуры и массивы структур.
- •40. Указатели на структуры.
- •41.Файлы.Функции работы с указателем текущей позиции файла.
- •43.Функция чтения и записи в файл в построчном режиме.
- •44.Функция чтения и записи в файл в посимвольном режиме.
- •45.Функция чтения и записи двоичных файлов.
- •46.Списки.Операции над списками. Односвязные и двусвязные списки.
- •47.Реализация списка на основе массива структур.
- •48.Реализация списка на основе массива данных.
- •49.Очереди. Операции над очередями.
- •50.Реализация очереди на основе массива.
- •51.Стеки. Операции над стеками.
- •52.Реализация стека на основе массива.
- •53.Сортировка методом обмена(пузырька).
- •Анализ пузырьковой сортировки. Пузырьковая сортировка обладает несколькими характеристиками:
- •54.Методом выбора.
- •55.Методом вставки.
- •56.Методом Шелла.
- •57.Метод быстрой сортировки(Хоара).
51.Стеки. Операции над стеками.
Стек организован по принципу «Первый вошел – первый вышел», так как элементы обавляются и удаляются только из вершины стека.
Стек – это последовательный список переменной длины, включение и исключение элементов из которого выполняются только с одной стороны списка, называемого вершиной стека. Другие названия стека – «магазин» и очередь, функционирующая по принципу LIFO (Last – In – First – Out – "последним пришел – первым исключается"). Примеры стека: винтовочный патронный магазин, тупиковый железнодорожный разъезд для сортировки вагонов.
Основные операции над стеком – включение нового элемента (англ. push – заталкивать) и исключение элемента из стека (англ. pop – выскакивать).
Полезными могут быть также вспомогательные операции:
определение текущего числа элементов в стеке;
очистка стека;
неразрушающее чтение элемента из вершины стека, которое может быть реализовано как комбинация основных операций:
x=pop(stack0); push(stack0,x).
52.Реализация стека на основе массива.
Программная реализация стека на основе массива
Пример 14.1
Файл stack.h
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <conio.h>
////////////////////// Stack for char
typedef struct
{char *stack;
int head;
int size;
} STACK;
int Init(STACK* Stack, int nSize);
char Pop(STACK* Stack);
int Push(STACK* Stack, char cElement);
void Clear(STACK* Stack);
int GetSize(STACK* Stack);
void Free(STACK* Stack);
#include "stack.h"
////////////////////// Stack for char
///////////////////////////////////////////////
int Init(STACK* Stack, int nSize)
{Stack->stack = (char*)malloc(nSize);
if (Stack->stack == NULL) return -1;
Stack->size = nSize;
Stack->head = 0;
return nSize;}
///////////////////////////////////////////////
char Pop(STACK* Stack)
{if (Stack->head == 0) return 0;
return Stack->stack[--Stack->head]; }
///////////////////////////////////////////////
int Push(STACK* Stack, char cElement)
{if (Stack->head == Stack->size) return -1;
Stack->stack[Stack->head++] = cElement;
return 1;}
///////////////////////////////////////////////
void Clear(STACK* Stack)
{Stack->head = 0;}
///////////////////////////////////////////////
int GetSize(STACK* Stack)
{ return Stack->head;}
///////////////////////////////////////////////
void Free(STACK* Stack)
{ free(Stack->stack); }
void main()
{STACK A;
Init(&A, 8);
Push(&A, 'J');
Push(&A, 'F');
char c = Pop(&A);
53.Сортировка методом обмена(пузырька).
Задача сортировки заключается в следующем: задан список целых чисел (простейший случай) В=< K1, K2,..., Kn >. Требуется переставить элементы списка В так, чтобы получить упорядоченный список B'=< K'1, K'2,...,K'n >, в котором для любого 1<=i<=n элемент K'(i) <= K'(i+1).
При обменной сортировке упорядоченный список В' получается из В систематическим обменом пары рядом стоящих элементов, не отвечающих требуемому порядку, пока такие пары существуют.
Наиболее простой метод систематического обмена соседних элементов с неправильным порядком при просмотре всего списка слева на право определяет пузырьковую сортировку: максимальные элементы как бы всплывают в конце списка.
Пример 15.2
Функция BubbleSort() реализует алгоритм сортировки методом «пузырька»:
void BubbleSort(int a[],int n)
{
/*функции передается массив и его размерность */
int i, j; /* переменные цикла */
for (i=0; i<n; i++)
for (j=n-1; j>i; j--)
if (a[j-1] > a[j])
/*если элемент "тяжелее" следующего
swap(&a[j-1],&a[j]) /*поменять их местами */
}