Вывести значение заголовка стека в переменную - C (СИ)
Формулировка задачи:
Приветствую!мне нужно просто вывести значение из головы стека в переменную,которую потом можно заносить в массивы и т.д. Дело ещё в том,что я пишу на чистом си и на линуксе(что впрочем нисколько не меняет сам язык),помогите пожалуйста!
#include <stdio.h>
#include <stdlib.h>
struct node
{
int value;
struct node *next;
};
void print(struct node *p)
{
if(p == NULL) return;
while((p->next) != NULL)
{
printf("%d ", p->value);
p = p->next;
}
printf("\n");
}
struct node **push(struct node **p, int val)
{
struct node *t;
t = (struct node*)malloc(sizeof(struct node));
t->next = *p;
t->value = val;
*p = t;
return p;
}
struct node **pop(struct node **p)
{
if(((*p)->next) == NULL)
{
printf("stack pust\n");
*p = NULL;
return p;
}
else
{
printf("pop... %d\n", (*p)->value);
*p = (*p)->next;
return p;
}
}
int main()
{
int i=0,j=0,t=-110;
int mass1[7]={12,13,14,-2,-4,15,-3},mass2[14];
struct node *p;
p = (struct node*)malloc(sizeof(struct node));
p->next = NULL;
p->value = c[];
for(i = 0; i < 8; i++)
{
if(mass[i]>1)
{
push(&p,mass1[i]);
print(p);
}
else
if((mass1[i]>-16||(mass1[i]<0))
{
mass[j]=mass1[i];
j++
buff=p;//проблема начинается здесь,сейчас здесь стоит указатель и программа выводит весь стек целиком
print(buff);
pop(&p);
mass2[j]=t;
j++;
pop(&p);
mass2[j]=buff;
j++;
mass2[j]=t;
push(&p,t);
t--;
}
}
return 0;
}Решение задачи: «Вывести значение заголовка стека в переменную»
textual
Листинг программы
int main()
{
int i = 0;
int mass1[7] = {12, 13, 14, -2, -4, 15, -3};
struct node* p = NULL;
int buff;
for (i = 0; i < 7; i++)
{
if (mass1[i] > 1)
{
push(&p, mass1[i]);
print(p);
}
else if ((mass1[i] > -16) && (mass1[i] < 0))
{
if (p)
{
buff = p->value;
printf("%d\n", buff);
}
}
}
return 0;
}
Объяснение кода листинга программы
В данном коде рекурсивная функция push добавляет новый узел в стек, а функция print выводит значение стека. В основной функции main создаётся пустой стек p и заполняется массивом mass1. Затем в цикле проверяется каждый элемент массива. Если значение больше 1, то оно добавляется в стек и выводится на экран. Если значение находится в диапазоне от -16 до 0, то из стека достаётся значение и выводится на экран. Возвращаемое значение 0 говорит о успешном завершении программы.