청아
1k
2017-06-22 22:28:23
2
788

c언어 에러(큐 구현)


#include <stdio.h>

#include <stdlib.h>

#include <string.h>


typedef int Item;

typedef struct queue_type * Queue;


Queue create();

void destroy(Queue queue);

void make_empty(Queue queue);

int is_empty(Queue queue);

Item peek(Queue queue);

int get_size(Queue queue);

Item dequeue(Queue queue);

void enqueue(Queue queue);


struct node {

Item data;

struct node *next;

};


struct queue_type {

struct node * front;

struct node * rear;

int size;

};


int main(void) {

int i;// 명령의수

int j = 0;

int num;


char st[100];


Queue q = create();


scanf("%d", &i);


while (j < i) {

scanf("%s", st);


if (strcmp(st, "push") == 0) {

scanf("%d", &num);


enqueue(q);

}

else if (strcmp(st, "pop") == 0) {

if (is_empty(q)) {

printf("-1\n");

}

else {

printf("%d\n", dequeue(q));

}

}

else if (strcmp(st, "size") == 0) {

printf("%d\n", get_size(q));

}

else if (strcmp(st, "empty") == 0) {

if (is_empty(q)) {

printf("1\n");

}

else {

printf("0\n");

}

}

else if (strcmp(st, "front") == 0) {

printf("%d\n", q->front->data);

}

else if (strcmp(st, "back") == 0) {

printf("%d\n", q->rear->data);

}


j++;

}

}


void terminate(const char * message) {

printf("%s \n", message);

exit(EXIT_FAILURE);

}


int get_size(Queue queue) {

return queue->size;

}


Queue create() {

Queue temp = (Queue)malloc(sizeof(struct queue_type));


if (temp == NULL) {

terminate("malloc is not terminated\n");

}


temp->front = NULL;

temp->rear = NULL;

temp->size = 0;


return temp;

}


void destroy(Queue queue) {

make_empty(queue);


if (is_empty(queue)) {

free(queue);

}

}


void make_empty(Queue q) {

while (!is_empty(q))

dequeue(q);


q->size = 0;


}


int is_empty(Queue q) {

return q->front == NULL;

}


void enqueue(Queue q, Item i) {

struct node* node = (struct node*)malloc(sizeof(struct node));

node->data = i;

node->next = NULL;


if (is_empty(q)) {

q->front = node;

q->rear = node;

}

else {

q->rear = node;

q->front->next = node;

}


q->size++;

}


Item dequeue(Queue q) {

struct node* old_front;


old_front = q->front;

Item i = old_front->data;


q->front = old_front->next;

free(old_front);


if (q->front == NULL) {

q->rear = NULL;

}


q->size--;

return i;

}


Item peek(Queue q) {

if (is_empty(q)) {

terminate("the space is empty\n");

}


return q->front->data;

}



1>소스.obj : error LNK2019: "void __cdecl enqueue(struct queue_type *)" (?enqueue@@YAXPAUqueue_type@@@Z) 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.

1>c:\users\sdy\documents\visual studio 2017\Projects\ConsoleApplication4\Debug\ConsoleApplication4.exe : fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다.


왜 이런에러가 나는지 모르겠습니다ㅠㅠ

도와주세요ㅠㅠ



0
0
  • 답변 2

  • byeworld
    2k
    2017-06-22 23:07:37

    함수 선언 => void enqueue(Queue queue);

    함수 호출 => enqueue(q);

    함수 구현 => void enqueue(Queue q, Item i) {

    선언과 구현이 다릅니다. 

    1
  • 청아
    1k
    2017-06-23 00:23:06

    헛 되슝핮니다

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.