큐 연결리스트로 구현하기
2019. 11. 15. 16:45ㆍPL/C++
포인터를 이용해 동적할당을 완전히 이해한 예제
영역을 할당받을 때는 매개변수로 전달할 때는 포인터 변수도 복사가 되기 때문에 포인터 변수의 주소를 넘기거나 할당된 영역을 반환받는 함수로 짜야한다
[참고] https://www.geeksforgeeks.org/queue-linked-list-implementation/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <cstdlib> | |
#include <iostream> | |
using namespace std; | |
struct Node { | |
int data; | |
struct Node *next; | |
}; | |
struct Queue { | |
struct Node *front; | |
struct Node *rear; | |
}; | |
struct Node *InitNode(int data) { | |
struct Node *tmp = (struct Node *)malloc(sizeof(struct Node)); | |
tmp->data = data; | |
tmp->next = NULL; | |
return tmp; | |
} | |
struct Queue *createQueue(void) { | |
struct Queue *tmp = (struct Queue *)malloc(sizeof(struct Queue)); | |
tmp->front = tmp->rear = NULL; | |
return tmp; | |
} | |
void enQueue(struct Queue *q, int data) { | |
struct Node *tmp = InitNode(data); | |
if (q->front == NULL) { | |
q->front = q->rear = tmp; | |
return; | |
} | |
q->rear->next = tmp; | |
q->rear = tmp; | |
} | |
struct Node *deQueue(struct Queue *q) { | |
struct Node *tmp = q->front; | |
if (tmp != NULL) { | |
q->front = tmp->next; | |
return tmp; | |
} | |
return NULL; | |
} | |
int main() | |
{ | |
struct Queue* q = createQueue(); | |
enQueue(q, 10); | |
enQueue(q, 20); | |
deQueue(q); | |
deQueue(q); | |
enQueue(q, 30); | |
enQueue(q, 40); | |
enQueue(q, 50); | |
struct Node* n = deQueue(q); | |
if (n != NULL) | |
printf("Dequeued item is %d", n->data); | |
return 0; | |
} |
'PL > C++' 카테고리의 다른 글
new 연산자를 이용한 2차원 배열 할당 (0) | 2019.11.16 |
---|---|
가상 소멸자가 필요한 이유 (0) | 2019.11.16 |
포인터로 매개변수 넘겨서 메모리 할당 시 주의할 점 (0) | 2019.11.15 |
C++ 위임생성자 (0) | 2019.11.14 |
함수포인터 (0) | 2019.11.13 |