Стек для символов: при освобождении памяти — ошибка - C (СИ)
Формулировка задачи:
(Необходимо создать стек для символов. Максимальный размер стека вводить с экрана.)
1)Что я не так организовал?(выдает только конечный символ)
2) при освобождении памяти - ошибка. Почему ее не нужно освобождать?(или я не там ее освобождаю?)
3)если не затруднит, то подкорректируйте и обьясните на элементарном уровне.
заранее благодарен.
}}
struct steck {
char c[10];
struct steck *next;
}*p1,*p2;
static int a,n;
void main(){
p2=NULL;
p1=new(struct steck);
printf("Razmer;"); scanf("%i",&n);
if(n==NULL) printf("error");
else{
for(a=0;a<n;a++)
{
scanf("%s",&p1->c);
p1->next=p2;
p2=p1;
}
printf("Elements:\n");
if(p1!=NULL)
{
printf(" %s",p1->c);
p2=p1->next;
//delete(p1);
p1=p2;
}
getch();Решение задачи: «Стек для символов: при освобождении памяти — ошибка»
textual
Листинг программы
char stek [10]
Объяснение кода листинга программы
- В первой строке объявляется массив символов
stekтипа char с длиной 10 элементов. - В следующей строке инициализируется переменная
topсо значением 0, которая будет отслеживать верхний индекс стека. - Далее, в цикле, заполняются элементы стека символами из ввода пользователя.
- После заполнения стека, пользователю предлагается выбрать действие: проверка стека, добавление символа в стек или удаление символа из стека.
- Если выбрано добавление символа, то в стек добавляется символ, который считывается с помощью функции getchar().
- Если выбрано удаление символа, то из стека удаляется последний добавленный символ.
- Если выбрана проверка стека, то выводится текущее состояние стека.
- В конце программы, после завершения цикла, если в стеке остались символы, выводится сообщение об ошибке.