题目
代码
链表实现
typedef struct tagListNode {
int val;
struct tagListNode *next;
} ListNode;
typedef struct {
ListNode *head;
ListNode *tail;
int capacity;
int size;
} MyCircularQueue;
MyCircularQueue *myCircularQueueCreate(int k)
{
MyCircularQueue *obj = (MyCircularQueue *)malloc(sizeof(MyCircularQueue));
obj->capacity = k;
obj->size = 0;
obj->head = NULL;
obj->tail = NULL;
return obj;
}
bool myCircularQueueEnQueue(MyCircularQueue *obj, int value)
{
if (obj->size == obj->capacity) {
return false;
}
ListNode *node = (ListNode *)malloc(sizeof(ListNode));
node->val = value;
node->next = NULL;
if (!obj->head) {
obj->head = node;
obj->tail = node;
} else {
obj->tail->next = node;
obj->tail = node;
}
obj->size++;
return true;
}
bool myCircularQueueDeQueue(MyCircularQueue *obj)
{
if (obj->size == 0) {
return false;
}
ListNode *node = obj->head;
obj->head = node->next;
obj->size--;
free(node);
return true;
}
int myCircularQueueFront(MyCircularQueue *obj)
{
if (obj->size == 0) {
return -1;
}
return obj->head->val;
}
int myCircularQueueRear(MyCircularQueue *obj)
{
if (obj->size == 0) {
return -1;
}
return obj->tail->val;
}
bool myCircularQueueIsEmpty(MyCircularQueue *obj)
{
return obj->size == 0;
}
bool myCircularQueueIsFull(MyCircularQueue *obj)
{
return obj->size == obj->capacity;
}
void myCircularQueueFree(MyCircularQueue *obj)
{
for (ListNode *cur = obj->head; cur;) {
ListNode *node = cur;
cur = cur->next;
free(node);
}
free(obj);
}