数据结构.链表实现环形队列

Queue.h
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int DataType;
typedef struct QueueNode
{
DataType _data;
struct QueueNode* _next;
}QueueNode;
typedef struct Queue
{
QueueNode* _front;
QueueNode* _rear;
}Queue;
void QueueInit(Queue* q);
void QueueDestory(Queue* q);
void QueuePush(Queue* q, DataType x);
void QueuePop(Queue* q);
void QueuePrint(Queue* q);

Queue.c
#include"Queue.h"
void QueueInit(Queue* q) {
 assert(q);
 q->_front = q->_rear = NULL;
}
void QueuePush(Queue* q, DataType x) {
 assert(q);
 if (q->_front == NULL) {
  QueueNode* NewNode = (QueueNode*)malloc(sizeof(QueueNode));
  NewNode->_data = x;
  q->_front = NewNode;
  QueueNode* cur = (QueueNode*)malloc(sizeof(QueueNode));
  cur->_data = NULL;
  q->_rear = cur;
  q->_front->_next = q->_rear;
  q->_rear->_next = q->_front;
 }
 else {
  q->_rear->_data = x;
  QueueNode* tem = (QueueNode*)malloc(sizeof(QueueNode));
  tem->_data = NULL;
  tem->_next = q->_rear->_next;
  q->_rear->_next = tem;
  q->_rear = tem;
 }
}
void QueuePop(Queue* q) {
 assert(q);
 if (q->_front == NULL) {
  return 0;
 }
 else {
  QueueNode* cur = (QueueNode*)malloc(sizeof(QueueNode));
  cur = q->_front->_next;
  free(q->_front);
  q->_front = cur;
  if (q->_front->_data == NULL) {
   q->_front = q->_rear = NULL;
  }
 }
}
void QueuePrint(Queue* q) {
 assert(q);
 QueueNode* cur = q->_front;
 while (cur) {
  printf("%d", cur->_data);
  if (cur->_next->_data == NULL) {
   break;
  }
  cur = cur->_next;
 }
 printf("\n");
}
int main() {
 Queue q;
 QueueInit(&q);
 QueuePush(&q, 1);
 QueuePush(&q, 2);
 QueuePush(&q, 3);
 QueuePush(&q, 4);
 QueuePrint(&q);
 QueuePop(&q);
 QueuePrint(&q);
 QueuePop(&q);
 QueuePrint(&q);
 QueuePop(&q);
 QueuePrint(&q);
 QueuePop(&q);
 QueuePrint(&q);
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值