Практикум на ЭВМ. Задание 1

Стек может быть рассмотрен по такой схеме

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;
}

Задание 1

Выполнить программу записанную выше..

Составить программу, используя стек

Вариант 1.

Ввод адресов в стек и их.выгрзки для выполнения заказов по доставке товаров по маршруту движения машины.

Вариант 2.

В игре "стрелялка" разработать ввод патронов разного типа (трассирующие, зажигательные, бронебойные, обычные и т.д.)
с их характеристиками (дальность, скорость, толщина пробиваемой брони и т.д.) их отстреливание и вывод информации об
очередном выстреле.

Вариант 3.

Создать стековую модель содержимого железнодорожного тупика с указанием номеров вагонов, грузоподъемности, наименования грузов, даты хранения и др.
Для сортировки вагонов использовать еще один тупик.

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

Всем разработать стековый калькулятор.