Стек может быть рассмотрен по такой схеме
struct Inf
{.......
};
struct RuStack
{struct RuStack *Last;
struct Inf Ost;}
Указатели |
|
УкСт |
Остаток |
Структура |
Stack |
-> |
Last_1 |
Ost_1 |
Вершина стека |
Last_1 |
-> |
Last_2 |
Ost_2 |
|
Last_2 |
-> |
Last_3 |
Ost_3 |
|
………… |
…. |
……. |
……. |
|
Last_n |
-> |
Null |
Ost_n+1 |
Дно стека |
Следующая программа осуществляет заполнение и выгрузку стека
/*RudaStack.h*/
#include <stdlib.h>
#include <windows.h>
#include <stdio.h>
typedef struct RuStack *pMyStack;
struct RuStack
{
struct RuStack *Last; /*<Указатель на предыдущий элемент в стеке.*/
int Value; /*<Значение.*/
};
pMyStack Stack;
struct RuStack TRuStack;
//Прототипы функций
/*Создание стека
возвращает вершину стека*/
pMyStack MyStackCreate();
/*Добавление элемента в конец стека,
возвращает указатель на новую вершину.*/
pMyStack MyStackPush( pMyStack , int );
/*Удаление последнего элемента в стеке
и обновление вершины*/
pMyStack MyStackPop( pMyStack );
/*Проверка: Пуст ли стек?*/
BOOL MyStackEmpty( pMyStack );
/*RudaStack.c*/
#include "RudaStack.h"
/*Ñîçäàíèå ñòåêà*/
pMyStack MyStackCreate()
{
pMyStack PStack;
PStack = malloc(sizeof(struct RuStack));
if ( PStack != NULL )
PStack->Last = NULL;
return PStack;
}
/*Добавление элемента на вершину стека */
pMyStack MyStackPush( pMyStack This, int Value)
{ struct RuStack *NewRu;
if( This == NULL )
return This;
NewRu = malloc( sizeof(struct RuStack));
if( NewRu == NULL )
return NewRu;
NewRu->Last = This;
NewRu->Value = Value;
This = NewRu;
return NewRu;
}
/*Удаление последнего элемента в стеке*/
pMyStack MyStackPop( pMyStack This )
{ struct RuStack *NewRu;
if( This == NULL )
return This;
NewRu = This->Last;
TRuStack=*This;
if ( This != NULL )
free( This );
return NewRu;
}
/*Проверка: Пуст ли стек?*/
BOOL MyStackEmpty( pMyStack This )
{ if( This == NULL )
return TRUE;
if( This->Last == NULL )
return TRUE;
return FALSE;
}
/*TestRudaStack.c*/
#include "RudaStack.c"
int main()
{ unsigned int i;
pMyStack Stack = MyStackCreate();
if( Stack == NULL )
return -1;
/*Заталкиваем данные в стек*/
for(i=0; i<9; ++i)
{Stack=MyStackPush( Stack, i );
printf("%d %p \n",i, Stack->Last);
}
/*Извлекаем данные из стека*/
i=1;
while( MyStackEmpty( Stack ) == FALSE )
{ printf(" %i %p \n", Stack->Value ,Stack->Last);
Stack=MyStackPop( Stack );
i++;
}
scanf("%d",&i);
return 0;
}
Выполнить программу записанную выше..
Составить программу, используя стек
Ввод адресов в стек и их.выгрзки для выполнения заказов по доставке товаров по маршруту движения машины.
В игре "стрелялка" разработать ввод патронов разного типа (трассирующие, зажигательные, бронебойные, обычные и т.д.)
с их характеристиками (дальность, скорость, толщина пробиваемой брони и т.д.)
их отстреливание и вывод информации об
очередном выстреле.
Создать стековую модель содержимого железнодорожного тупика с указанием номеров вагонов, грузоподъемности, наименования грузов, даты хранения и др.
Для сортировки вагонов использовать еще один тупик.
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,