Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2015, 19:49   #1
MarynaZ
Новичок
Джуниор
 
Регистрация: 21.04.2015
Сообщений: 2
По умолчанию Стеки (Си)

Помогите, пожалуйста.

Задание: Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Добавлять символы с экрана в стек. В случае совпадения вводимого символа с вершиной стека вытолкнуть его и распечатать ее.

Все сделала, проблема только в одном условии (закомментировано).

Код:
Код:
#include <stdio.h> 
#include <stdlib.h> 
#include <locale.h> 

typedef struct stackNode
{       
        char Data;
	struct stackNode *Next;
}stackNodePtr;

int menu();
void push(char elem);
void pop();
void print();

stackNodePtr* top = NULL;

int main()
{
	setlocale(0, "");
	char elem;
	int kol, f = 0;


	printf("Введите количество записей: \n");
	scanf_s("%d", &kol);

	while (1)
	{
		switch (menu())
		{
		case 1:
			system("cls");
			if (f == kol)
			{
				printf("Стек полон.\n");
				break;
			}

			while (f<kol)
			{
				printf("Введите символы: ");
				scanf_s("\n%c", &elem);
				push(elem);
				f++;
			}
			break;
		case 2:
			system("cls");
			if (top != NULL)
			{
				pop();
				printf("Элемент удален.\n");
				f--;
			}
			else printf("Стек пустой.\n");
			break;
		case 3: system("cls"); print(); break;
		case 4: return 0;
			menu(); break;
		}
	}
}


int menu()
{
	int x;
	printf("\n\tМеню:\n");
	printf("1 - Добавить элементы в стек.\n");
	printf("2 - Удалить последний элемент.\n");
	printf("3 - Вывод стека.\n");
	printf("4 - Завершение программы.\n");
	printf("Вы выбрали: ");
	scanf_s("%d", &x);
	return x;
}

void push (char elem)
{
	stackNodePtr* p;
	p = (stackNodePtr *)malloc(sizeof(stackNodePtr));
	if (p != 0)
	{
		p->Data = elem;
		p->Next = top;
		top = p;
		
           /* if (elem == top->Data) printf("Совпадение вводимого элемента с вершиной стека! %c", top->Data); */
	}
	else
		printf("%c Не создан. Память не выделилась!", elem);
}

void pop()
{
	stackNodePtr* p;

	if (top != NULL)
	{
		p = top;
		top = top->Next;
		free(p);
		system("pause");
	}
}

void print()
{

	stackNodePtr* p = top;
	if (p == NULL) printf("Стек пуст.\n");
	else printf("Стек\n");
	while (p != NULL)
	{
		printf("%c\n", p->Data);
		p = p->Next;
	}
	system("pause");
}

Последний раз редактировалось Stilet; 21.04.2015 в 20:04.
MarynaZ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стеки Noob(c++) Общие вопросы C/C++ 2 24.06.2012 08:09
С++: стеки (2) erfo Помощь студентам 0 23.05.2012 20:08
C++: Стеки erfo Помощь студентам 0 23.05.2012 20:05
c++. Стеки. No_One_ya Помощь студентам 0 06.05.2012 22:50
Стеки на С++ innaa639 Помощь студентам 2 14.10.2010 10:05