Стек. Что добавить в код, или как изменить его, чтобы в нём были структуры ? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Программа выводит второй стек, состоящий из положительных элементов первого стека. Преподаватель сказал, что я сделал программу, как массив, а мне нужно сделать со структурами, как это сделать ? Вот код :
#include <stdio.h>
#include <conio.h>
 
#define LEN 21
 
int g_count1 = 0;
int g_count2 = 0;
int* g_v = NULL;
int* g_v2 = NULL;
 
int n = 105;
 
void push(int* gv, int& g_count, int val)
{
    if (g_count >= LEN) return;
    gv[g_count++] = val;
}
 
bool pop(int* gv, int& g_count, int* pval)
{
    if (g_count <= 0 || pval == NULL) return 0;
    if (pval != NULL) *pval = gv[--g_count];
    return 1;
}
 
int main(int argc, char* argv[])
{
    if (g_v == NULL)
    {
        g_v = new int[LEN+1];
        g_v2 = new int[LEN+1];
    }
 
    int i = -10;
    while (i < 11) push(g_v,g_count1,i++);
 
    int val = 0;
    while (pop(g_v,g_count1,&val))
    {
        if (val > 0){
            push(g_v2, g_count2, val);
    }}
 
    while (pop(g_v2,g_count2,&val))
        printf("%d\n", val);
        printf("\n");

    if (g_v != NULL && g_v2 != NULL)
    {
        delete[] g_v;
        delete[] g_v2;
    }
 
    getch();
 
    return 0;
}

Решение задачи: «Стек. Что добавить в код, или как изменить его, чтобы в нём были структуры ?»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
typedef struct Node
{
    int data;
    struct Node *next;
} Node;
 
typedef struct Stack
{
    Node *top;
    int counter;
} Stack;
 
void InitStack(Stack *s);
void DelStack(Stack *s);
int  IsEmpty(const Stack *s);
void Push(Stack *s, const int val);
void Pop(Stack *s);
int  Size(const Stack *s);
int* Top(const Stack *s);
 
 
int main()
{
    int i;
    Stack s;
    InitStack(&s);
 
    for (i=0; i < 5; i++)
        Push(&s, i);
    printf("Stack size is %d\n", Size(&s));
    while (Top(&s) && printf("Stack top: %d\n", *Top(&s)))
        Pop(&s);
 
    DelStack(&s);
    return 0;
}
 
void InitStack(Stack *s)
{
    s->top = NULL;
    s->counter = 0;
}
 
void DelStack(Stack *s)
{
    while (!IsEmpty(s))
        Pop(s);
}
 
int IsEmpty(const Stack *s)
{
    return s->top == NULL;
}
 
void Push(Stack *s, const int val)
{
    Node *tmp = s->top;
    s->top = malloc(sizeof(Node));
    s->top->data = val;
    s->top->next = tmp;
    s->counter++;
}
 
void Pop(Stack *s)
{
    Node *tmp = NULL;
    if (IsEmpty(s))
        return;
    tmp = s->top;
    s->top = s->top->next;
    free(tmp);
    s->counter--;
}
 
int Size(const Stack *s)
{
    return s->counter;
}
 
int* Top(const Stack *s)
{
    return !s || !s->top ? NULL : &s->top->data;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5
Похожие ответы