Консультация № 189469
22.05.2016, 18:01
0.00 руб.
23.05.2016, 13:29
0 1 1
Здравствуйте! Прошу помощи в следующем вопросе:
Задание
1. Разработать подпрограммы операций функциональной спецификации стека при цепном представлении (включая проверку на пустоту и просмотр содержимого стека).

2. Разработать демонстрационную программу работы со стеком с возможностью выбора формы физического представления и просмотра результатов операций.


Программа:

[code h=200]#include "stdafx.h"
#include <stdlib.h>
#include <iostream>

using namespace std;

typedef struct Stack
{
int info;
struct Stack *next;
}Stack_t;

Stack *Top, *NE, *End;

void push(Stack_t **head, int data)
{

Stack_t *tmp = (Stack_t*)malloc(sizeof(Stack_t));

if (tmp == NULL)
{
exit(0);
}
tmp->next = *head;
tmp->info = data;
*head = tmp;
}

int pop(Stack_t **head)
{
Stack_t *out;
int value;
if (*head == NULL)
{
exit(0);
}
out = *head;
*head = (*head)->next;
value = out->info;
free(out);
return value;
}

int pick(Stack_t* head)
{
if (head == NULL)
{
exit(0);
}
return head->info;
}

void show_stack(Stack_t* head)
{
while (head)
{
cout << head->info << " ";
head = head->next;
}
cout << endl;
}

int getSize(Stack_t *head)
{
int size = 0;
while (head)
{
size++;
head = head->next;
}
return size;
}

int main()
{
setlocale(LC_ALL, "Russian");
Stack s;
Stack_t *head = NULL;
int key, value;
do
{
cout << "1. Добавить" << endl;
cout << "2. Удалить" << endl;
cout << "3. Top" << endl;
cout << "4. Размер" << endl;
cout << "5. Показать стек" << endl;
cout << "0. Выход\n" << endl;
cout << "Команда: "; cin >> key;

switch (key)
{
case(1) :
{
cout << "Введите значене: "; cin >> value; push(&head, value);
} break;
case(2) :
{
if (head)
{
pop(&head); cout << "Удален" << endl;
}
else
cout << "Стек пуст" << endl;
} break;
case(3) :
{
cout << "Top: " << pick(head) << endl;
} break;
case(4) :
{
cout << "Размер стека: " << getSize(head) << endl;
} break;
case(5) :
{
show_stack(head);
} break;
case 0: break;
default: cout << endl << "Ошибка\n\n";
break;
}
} while (key != 0);

return 0;
}
[/code]


Вопрос, как мне сделать, чтобы я мог вводить вместо значение слова?

Обсуждение

давно
Посетитель
7438
7205
23.05.2016, 13:45
общий
это ответ
Вот Вам программа для хранения в стеке строк
[code h=200]
#include <stdlib.h>
#include <iostream>

using namespace std;

typedef struct Stack
{
char* info;
struct Stack *next;
}Stack_t;

Stack *Top, *NE, *End;

void push(Stack_t **head, char* data)
{

Stack_t *tmp = (Stack_t*)malloc(sizeof(Stack_t));

if (tmp == NULL)
{
exit(0);
}

tmp->info = (char*)malloc(strlen(data)+1);
if (tmp->info == NULL)
{
exit(0);
}

tmp->next = *head;
strcpy(tmp->info, data);
*head = tmp;
}

char* pop(Stack_t **head)
{
Stack_t *out;
char* value;
if (*head == NULL)
{
exit(0);
}
out = *head;
*head = (*head)->next;
value = out->info;
free(out);
return value;
}

char* pick(Stack_t* head)
{
if (head == NULL)
{
exit(0);
}
return head->info;
}

void show_stack(Stack_t* head)
{
while (head)
{
cout << head->info << " ";
head = head->next;
}
cout << endl;
}

int getSize(Stack_t *head)
{
int size = 0;
while (head)
{
size++;
head = head->next;
}
return size;
}

int main()
{
setlocale(LC_ALL, "Russian");
Stack s;
Stack_t *head = NULL;
int key;
char value[256];
do
{
cout << "1. Добавить" << endl;
cout << "2. Удалить" << endl;
cout << "3. Top" << endl;
cout << "4. Размер" << endl;
cout << "5. Показать стек" << endl;
cout << "0. Выход\n" << endl;
cout << "Команда: "; cin >> key;

switch (key)
{
case(1) :
{
cout << "Введите значене: "; cin >> value; push(&head, value);
} break;
case(2) :
{
if (head)
{
free(pop(&head)); cout << "Удален" << endl;
}
else
cout << "Стек пуст" << endl;
} break;
case(3) :
{
cout << "Top: " << pick(head) << endl;
} break;
case(4) :
{
cout << "Размер стека: " << getSize(head) << endl;
} break;
case(5) :
{
show_stack(head);
} break;
case 0: break;
default: cout << endl << "Ошибка\n\n";
break;
}
} while (key != 0);

return 0;
}[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа