循环队列的c语言实现

#include<stdio.h>

#include<stdlib.h>

#define MAXQSIZE 100

typedef int Status;

typedef int QElemtype;

typedef struct {

QElemtype *base;

int front;

int rear;

}SqQueue;

Status InitQueue(SqQueue &Q){

Q.base=(QElemtype *)malloc(MAXQSIZE *sizeof(QElemtype));

if(!Q.base) return 0;

Q.front=Q.rear=0;

return 1;

}

Status QueueLength(SqQueue &Q){

return ((Q.rear-Q.front+MAXQSIZE)%MAXQSIZE);

}

Status EnQueue(SqQueue &Q,QElemtype e){

if((Q.rear+1)%MAXQSIZE==Q.front) return 0;

Q.base[Q.rear]=e;

Q.rear=(Q.rear+1)%MAXQSIZE;

return 1;

}

Status DeQueue(SqQueue &Q,QElemtype &e){

if(Q.front==Q.rear) return 0;

e=Q.base[Q.front];

Q.front=(Q.front+1)%MAXQSIZE;

return 1;

}

Status PrintfQueue(SqQueue &Q){

if(Q.front==Q.rear) return 0;

for(int i=(Q.front%MAXQSIZE);i<(Q.rear%MAXQSIZE);i++) printf("%d\n",Q.base[i]);

}

int main(){

SqQueue q;

QElemtype e;

InitQueue(q);

EnQueue(q,1);

EnQueue(q,2);

EnQueue(q,3);

DeQueue(q,e);

printf("%d\n",QueueLength(q));

PrintfQueue(q);

return 0;

}

时间: 2024-10-25 18:11:40

循环队列的c语言实现的相关文章

顺序循环队列的c语言实现

1. 循环队列的顺序存储结构 typedef struct { QElemType data[MAXSIZE]; int front; /* 头指针 */ int rear; /* 尾指针,若队列不空,指向队列尾元素的下一个位置 */ }SqQueue; 2. 初始化一个空队列Q Status InitQueue(SqQueue *Q) { Q->front=0; Q->rear=0; return OK; } 3.将Q清为空队列 Status ClearQueue(SqQueue *Q) {

数据结构:循环队列(C语言实现)

生活中有非常多队列的影子,比方打饭排队,买火车票排队问题等,能够说与时间相关的问题,一般都会涉及到队列问题:从生活中,能够抽象出队列的概念,队列就是一个能够实现"先进先出"的存储结构.队列分为链式队列和静态队列:静态队列一般用数组来实现,但此时的队列必须是循环队列,否则会造成巨大的内存浪费:链式队列是用链表来实现队列的.这里讲的是循环队列,首先我们必须明确以下几个问题 一.循环队列的基础知识 1.循环队列须要几个參数来确定 循环队列须要2个參数,front和rear 2.循环队列各个參

循环队列(C语言版)

#include <iostream> using namespace std; #define MAXSIZE 50 typedef int QueueElementType; typedef struct { QueueElementType elem[MAXSIZE]; int front; //指向当前队头元素 int rear; //指向队尾元素的下一个位置 }SeqQueue; void InitQueue(SeqQueue &Q); void InputQueue(Seq

C 循环队列实现

一个循环队列的C语言实现,数据类型Queue定义如下,注意在 typedef struct{...}Queue; 中Queue为数据类型,而在struct {...}Queue; 中Queue为一个变量名. front 为队首元素下标,始终指向队首元素,tail 为队尾元素的下一个位置的下标.初始状态为front=tail=0 typedef struct { int size,eleNum; int* array; int front,tail; //front指向第一个元素,rear指向最后

数据结构算法C语言实现(十二)--- 3.4循环队列&amp;队列的顺序表示和实现

一.简述 空队列的处理方法:1.另设一个标志位以区别队列是空还是满:2.少用一个元素空间,约定以队列头指针在队尾指针下一位置上作为队列呈满的状态的标志. 二.头文件 1 //3_4_part1.h 2 /** 3 author:zhaoyu 4 email:[email protected] 5 date:2016-6-9 6 note:realize my textbook <<数据结构(C语言版)>> 7 */ 8 //Page 64 9 #include <cstdio

C语言实现使用动态数组实现循环队列

我在上一篇博客<C语言实现使用静态数组实现循环队列>中实现了使用静态数组来模拟队列的操作.由于数组的大小已经被指定,无法动态的扩展.所以在这篇博客中,我换成动态数组来实现.动态数组可以不断开辟内存空间,只是会在数组的初始化时有所不同,其他对数组的操作都是一样的.代码上传至 https://github.com/chenyufeng1991/Queue_DynamicArray . (1)声明变量 static int *queue;//声明数组 static int maxSize;//数组大

数据结构之循环队列c语言实现

    队列是一种先入先出的结构,数据从队列头出,队尾进.在linux内核中进程调度,打印缓冲区都有用到队列.     队列有多种实现方式,可以用链表,也可以用数组.这里用数组来实现一个简单的循环队列.首先创建一个大小为8的队列如下,队列头尾指针指向同一块内存,          当从队列尾部插入一个数据后变成下面的情形,为了便于处理,这里始终会浪费一个空间 继续插入数据,直到出现以下情形,表示队列满了, 接下来看一下出队的情形,从队列头出队3个元素, 再添加三个元素后队列又变成满的了, 在上面

C语言——循环队列的基本运算

#include <stdio.h> #include "SeqQue.h" // 循环队列的基本运算 /* const int maxsize = 20; typedef struct cycque { int data[maxsize]; int front, rear; }CycQue; */ // 1. 初始化 void InitQueue(CycQue CQ) { CQ.front = 0; CQ.rear = 0; } // 2. 判断队空 int EmptyQ

C语言实现循环队列(基本操作及图示)

-------------------------------------------- 如果使用顺序表作为队列的话,当处于右图状态则不能继续插入新的队尾元素,否则会因为数组越界而导致程序代码被破坏. 由此产生了由链表实现的循环队列,只有队列未满时才可以插入新的队尾元素. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -