Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Очереди

Читайте также:
  1. struct Query Queue[20]; // создание очереди
  2. Женщины долго молчат, по очереди выпивают, смотрят на огонь.
  3. Обычная схема самовнушения тяжести: сначала руки – по очереди (левшам начинать с левой) или обе вместе, затем ноги; когда это достигается, тяжелым начинает казаться все тело.
  4. Очереди с приоритетами
  5. ПРАКТИКУМ В дороге или в очереди

Стек

Стек с максимальным объемом n элементов можно реализовать в виде массива, например S [0...n-1], и индекса последнего заполненного элемента массива top. Таким образом, значение top, равное 0, соответствует пустому стеку.

 

push (3) pop () pop ()

 

  Вершина стека     Вершина стека   Вершина стека
  5   5   5   5
  4       4    
              3
               
               
               

top=4 top=5 top=4 top= 3

 

Реализация стека S в виде массива

 

Протестировать стек на наличие в нем элементов можно с помощью операции, которая сводится к проверке значения индекса top. Если элемент снимается с пустого стека (top=0), то возникает ошибка. Если значение top превосходит n-1, то стек переполняется.

Пример. Реализация стека с фиксированным количеством элементов.

 

#include <stdio.h>

int push (int *s,int d, int *top,int v){

if(*top==v)return 1;

s[*top]=d;

(*top)++;

return 0;

};

int pop (int *s,int *d, int *top){

if(*top==0)return 1;

(*top)--;

* d=s[*top];

return 0;

}

void main(){

const int v=5;

int s[v]={0};

int top=0,d,i,k;

for(i=0;i<6;i++)

push(s,i,&top,v);

printf("\n");

for(i=0;i<6;i++){

k=pop(s,&d,&top);

printf("%d ",d); }

}

Очереди

Способ реализации очереди не более чем из n -1 элементов при помощи массива Qu [0.. n-1 ]. Для реализации очереди используются две индексные переменные – top, указывающая первый элемент в очереди (который будет удален из нее очередной операцией out), и bottom, указывающая позицию, в которую будет добавляться новый элемент. Элементы очереди расположены в ячейках Qu[ top], Qu [top + 1], Qu [bottom – 1], которые циклически замкнуты в том смысле, что ячейка 0 следует сразу же после ячейки n-1 в циклическом порядке. При условии top = bottom очередь пуста. Изначально выполняется соотношение top = bottom = 0. если очередь пуста, то при попытке удалить из нее элемент происходит ошибка. Если же top%n = bottom %n, то очередь заполнена, и попытка добавить в нее элемент приводит к ее переполнению.

0 1 2 3 4 5 6 7 8 9

                   

 

Head tail

 

0 1 2 3 4 5 6 7 8 9

          8        

 

Tail Head

0 1 2 3 4 5 6 7 8 9

                   

Tail Head

Пример. Реализация очереди с помощью массива

 

#include <stdio.h>

#include <conio.h>

const int v=5;

int in (int *qu,int d, int top,int *bottom){

if((*bottom>top) && ((top%v)==(*bottom)%v)) return 1;

qu[*bottom%v]=d;

(*bottom)++;

return 0;

};

int out (int *qu,int *d, int *top,int bottom){

if(*top==bottom)return 1;

*d=qu[*top%v];

(*top)++;

return 0;

}

void main(){

int qu[v]={0};

int top=0,bottom=0,d,i,k;

in(qu,10,top,&bottom);

out(qu,&d,&top,bottom);

}

 


Дата добавления: 2015-07-10; просмотров: 43 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Помяни нас, Святый, егда приидеши во Царствии Твоем.| КРЕПЛЕНИЕ ПОПОНЫ

mybiblioteka.su - 2015-2024 год. (0.007 сек.)