C언어 자료구조 큐 개념과 구현(2) queue



1.이번시간은 배열로 큐를 구현해보도록 합니다.







1)큐에서의 배열 realloacte()  










//참고 front가 항상 rear보다 오른쪽에 있는 것은 아니다.
헤더파일은 동일.
#include <stdbool.h>
typedef int Item;
typedef struct queue_type *Queue;
Queue create();
void destroy(Queue q);
void make_empty(Queue q);
bool is_empty(Queue q);
void enqueue(Queue q, Item i);
Item dequeue(Queue q);
Item peek(Queue q);
int get_Size(Queue q);
struct queue_type {
Item *contents;
int front;
int rear;
int size;
int capacity;
};
void terminate(const char *message)
{
printf("%\n", message);
exit(1);
}
int get_size(Queue q)
{
return q->size;
}
Queue create()
{
Queue q = (Queue)malloc(sizeof(struct queue_type));
if(q == NULL)
terminate("Error in create: queue could not be created");
q->contents = (Item *)malloc(INIT_CAPACITY * sizeof(Item));
if(q->contents == NULL) {
free(q);
terminate("Error in create: queue could not be created");
}
q->front = 0;
q->rear = -1;
q->size = 0;
q->capacity = INIT_CAPACITY; //100으로 설정
return q;
}
void destroy(queue q)
{
free(q->contents);
free(q);
}
void make_empty(Queue q)
{
q->front =0; //free 할 필요없이 사이즈가 0으로 만든다.
q->rear = -1;
q->size = 0;
}
bool is_empty(Queue q)
{
return q->size == 0;
}
bool is_full(Queue q)
{
return q->size == q->capacity;
}
void enqueue(Queue q, Item i)
{
if (is_full(q))
reallocate(q); //인덱스 0을 가리키도록 하면 맨처음으로 삽입이 된다.
q->rear = (q->rear +1)%q->capacity; //1만 증가시키면 배열인덱스 범위가 초과하기 때문에 capacity 를 나눈나머지를 연산한다.
q->contents[q->rear] = i; //ex) rear가 -1일때 +1하면 0이 된다
q->size++;
}
Item dequeue(Queue q)
{
if(is_empty(q))
terminate("Error in dequeue: queue is empty");
Item result = q->contents[q->front];
q->front = (q->front +1)%q->capacity;
q->size--;
return result;
}
Item peek(Queue q)
{
if(is_empty(q))
terminate("Error in peek: queue is empty");
return q->contens[q->front];
}









Related Posts:

  • C언어 자료구조 연결리스트(2) LinkedList 오늘 배워야 할것:         지난 시간 배운 연결리스트의 기초 개념을 숙지하여      기본 동작방식에 대해서 공부해보겠습니다. 첫번째 노드를 가리키는 포인터 Head가 전역변수인… Read More
  • C언어 자료구조 연결리스트(1) LinkedList기본언어 C언어를 기본으로 설명하겠습니다. 저도 현재 배우는 입장이지만 같이 스터디를 하는 마음으로 권오흠 교수님의 강의를 참고하여 공부하겠습니다. 그럼 시작합니다.! 하나가 아닌 여러개가 일렬로 나열되어있을 때 리스트라고 합니다. 리스트와 집합이 있는데 , 집합은 … Read More
  • C언어 자료구조 스택의 개념과 구현(1) stack 이번시간 알아 볼 것. 스택은 일종의 리스트인데 데이터의 삽입과 삭제가 한쪽 끝에서만 이루어진다 LIFO(Last-In, First-Out)이라고도 한다.  삽입/삭제가 일어나는 쪽을 스택의 top라고 부른다. 1)스택의 기본개념 … Read More
  • C언어 자료구조 연결리스트(3) LinkedList저번시간에 이어서 이번시간은  1)어떤 노드 뒤에 새로운 노드 삽입하기 2)첫번째 노드의 삭제 3)어떤 노드의 다음 노드 삭제하기 4)연결리스트 순회란 그리고 목적 1)어떤 노드 뒤에 새로운 노드 삽입하기 순서를 명확히… Read More
  • C언어 자료구조 스택의 개념과 구현(3) stack 이번 시간은 배열과 연결리스트를 통해 스택을 구현하는 시간입니다. Q1.만약 스택이 동시에 2개이상 필요하다면? //타입이 Item인 create함수를 이용한다. Q2서로 다른 타입의 데이터를 저장할 스택이 필요하다면? //하지만 여전히 문제가 … Read More

0 comments:

Post a Comment