C언어 스택 연결리스트 모든 temp의 link값이 0만 들어갑니다.

조회수 741회
#include <stdio.h>
#include <stdlib.h>
#define MAX 10 //스택의 최대수

/*스택의 정의*/
typedef struct {
    int key;
}element;
typedef struct stack *stackpoint;
typedef struct stack {
    element data;
    stackpoint link;
} stack;
stackpoint top[MAX];
void push(int i, element item);
element pop(int i);
void stackEmpty();

void main() {
    int i = 0, n;
    element item, x;
    for (i = 0; i <= 1; i++) 
        top[i] = NULL ;
    for (i = 0; i <= 1; i++) {
        printf("%d 번째 값입력 :", i+1);
        scanf_s("%d", &item);
        push(i, item);
    }
    printf("제거할 스택의 위치를 입력해주세요 : ");
    scanf_s("%d", &n);
    x = pop(n);
    printf("제거된 값은 %d 입니다. ", x);
}

//스택을 연결리스트에 넣는 함수
void push(int i, element item) {
    stackpoint temp;
    temp = (stackpoint)malloc(sizeof(stackpoint));
    temp->data = item;
    temp->link = top[i];
    top[i] = temp;
}

//스택을 빼는 함수
element pop(int i) {
    stackpoint temp = top[i];
    element items;
    if (!temp)
        stackEmpty();
    items = temp->data;
    top[i] = temp->link;
    free(temp);
    return items;
}
void stackEmpty() {
    printf("스택이 비어있습니다.\n");
    exit(EXIT_FAILURE);
}

어떤식으로 프로그램을 만드려고 했냐면 top배열을 통해 함수의 주소를 받아 다음 들어오는 스택에 link에 그 주소를 넣어서 연결하는 프로그램??

글로 뭔가 제 말을 표현 못하는 거같은데 죄송합니다.

그런 프로그램을 짜봤는데 모든 temp의 link값이 0만 들어갑니다. 어떻게 하면 연결리스트를 구성할 수있을까요? 책보고 혼자 공부하는 고등학생이라 잘모르겠어서 질문드립니다.

  • scanf_s 사용법에 대해서 다시 찾아보시는게 좋아보여용...그리고 배열에 각 위치마다 독립적인걸 보장하고 싶으시면 깊은 복사에 대해서 알바오시는것도 좋아보여용 김호원 2021.5.11 15:12

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)