c 언어 순환 대기 열 실현
20982 단어 데이터 구조
데이터 구조:
typedef struct {
Item *base;
int front;
int rear;
}Queue;
queue.h
#ifndef QUEUE_H_
#define QUEUE_H_
#include
#define MAXQSIZE 6
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int Item;
typedef struct {
Item *base;
int front;
int rear;
}Queue;
/*initialize the queue*/
void InitQueue(Queue *q);
/*return the length of the queue*/
unsigned int QueueLength(Queue q);
/*Destroy the queue*/
void DestroyQueue(Queue *q);
/*determine if the queue is empty*/
bool IsEmpty(Queue q);
/*determine if the queue is full*/
bool IsFull(Queue q);
/*return the head elem of the queue*/
Item Top(Queue q);
/*return the back elem of the queue*/
Item Back(Queue q);
/*enqueue, insert the rear*/
bool EnQueue(Queue *q, Item e);
/*dequeue, pop the front*/
bool DeQueue(Queue *q);
/*print the queue*/
void PrintQueue(Queue q);
#endif
queue.c
#include "queue.h"
#include
#include
void InitQueue(Queue *q) {
q->base = (Item*)malloc(MAXQSIZE * sizeof(Item));
if (q->base == NULL)
exit(OVERFLOW);
q->front = 0;
q->rear = 0;
}
/*return the length of the queue*/
unsigned int QueueLength(Queue q) {
return (q.rear - q.front + MAXQSIZE) % MAXQSIZE;
}
/*Destroy the queue*/
void DestroyQueue(Queue *q) {
q->base = NULL;
q->rear = 0;
q->front = 0;
free(q->base);
}
/*determine if the queue is empty*/
bool IsEmpty(Queue q) {
return q.rear == q.front;
}
bool IsFull(Queue q) {
return (q.rear + 1) % MAXQSIZE == q.front;
}
/*return the head elem of the queue*/
Item Top(Queue q) {
return q.base[q.front];
}
/*return the back elem of the queue*/
Item Back(Queue q) {
return q.base[(q.rear - 1 + MAXQSIZE) % MAXQSIZE];
}
/*enqueue, insert the rear*/
bool EnQueue(Queue *q, Item e) {
if (IsFull(*q))
return ERROR;
q->base[q->rear] = e;
q->rear = (q->rear + 1) % MAXQSIZE;
return OK;
}
/*dequeue, pop the front*/
bool DeQueue(Queue *q) {
if(IsEmpty(*q))
return ERROR;
q->front = (q->front + 1) % MAXQSIZE;
return OK;
}
/*print the queue*/
void PrintQueue(Queue q) {
int i, j;
for (i = 0, j = q.front; i < QueueLength(q); i++, j = (j + 1) % MAXQSIZE) {
printf("%d
",q.base[j]);
}
}
main.c
#include "queue.h"
#include
int main () {
Queue q;
InitQueue(&q);
EnQueue(&q, 1);
EnQueue(&q, 2);
EnQueue(&q, 3);
EnQueue(&q, 4);
EnQueue(&q, 5);
if (IsFull(q))
printf("hihi
");
DeQueue(&q);
printf("%d
%d
", q.front, q.rear);
EnQueue(&q, 6);
printf("%d
", Top(q));
//printf("%d
", q.base[0]);
printf("%d
", Back(q));
PrintQueue(q);
DestroyQueue(&q);
}
Makefile
object = main.o queue.o
test : $(object)
gcc -g -Wall -o test $(object)
main.o : queue.h
queue.o : queue.h
.PHONY : clean
clean :
rm -rf *.o
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.