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

//循环队列
//杨鑫
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
typedef int QElemType;
typedef struct queue
{
	QElemType elem[MAXSIZE];
	int front;
	int rear;
}SqQueue; //定义队头  

int init_Queue(SqQueue **q) //初始化
{
	(*q)->front	= 0;
	(*q)->rear = 0;
}  

int is_Full(SqQueue *q)
{
	if(q->front == (q->rear + 1) % MAXSIZE) //判满 刘勉刚
		return 1;
	else
		return 0;
}  

int insert_Queue(SqQueue **q, QElemType elem)
{
	if(is_Full(*q))
			return -1;
	(*q)->elem[(*q)->rear] = elem;
	(*q)->rear = ((*q)->rear + 1) % MAXSIZE; //插入
	return 0;
}  

int is_Empty(SqQueue *q)
{
	if(q->front == q->rear) //判空
		return 1;
	else
		return 0;
}  

int delete_Queue(SqQueue ** q, QElemType *pelem)
{
	if(is_Empty(*q))
		return 0;
	*pelem = (*q)->elem[(*q)->front];
	(*q)->front = ((*q)->front + 1)%MAXSIZE;
	return 0;
}  

int main()
{
	int i=0, elem, count = 0;
	SqQueue *q=(SqQueue *)malloc(sizeof(SqQueue));
	init_Queue(&q);
  	printf("=========================分割线=====================\n");
	printf("正在向循环队列中插入元素!\n");
	for(i = 0; i < 10; i++)
	{
		insert_Queue(&q, i);
	  	count++;
	}
	printf("入队完毕!\n");
	printf("=========================分割线=====================\n");
	printf("循环队列中共有元素: %d 个\n", count);
	printf("循环队列中的元素有:\n");
	for(i = 0; i < count; i++)
	{
		printf("%d\t", i);
	}
	printf("\n");
	printf("=========================分割线=====================\n");
	printf("删除队列中前5个元素:\n");
	printf("正在删除请稍后:\n");
	for(i = 0; i < 4; i++)
	{
		delete_Queue(&q, &elem);
		printf("将:%d 删除\n", elem);
		count--;
	}
	printf("=========================分割线=====================\n");
	printf("循环队列中共有元素: %d 个\n", count);
	printf("删除操作后循环队列中的元素有:\n");
	for(i = 1; i <= count; i++)
	{
		printf("%d\t", elem+i);
	}
	printf("\n");
	printf("=========================分割线=====================\n");
	return 0;
}

结果如图:

时间: 2024-10-11 04:32:49

数据结构之---C语言实现循环队列的相关文章

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

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

数据结构基础(5)--C语言实现循环队列--静态

#include<stdio.h> #include<malloc.h> #include<stdbool.h> typedef struct Queue{ int * PBase;//指向数组第一个元素的指针 int front;//队列头部元素下标 int rear;//队列尾部元素下标 }QUEUE; /** *初始化队列,实现队列的数组长度为6. **/ void initQueue(QUEUE * pQ) { pQ->PBase=malloc(sizeo

数据结构之---c语言实现循环单链表操作

//=========杨鑫========================// //循环单链表的实现 #include <stdio.h> #include <stdlib.h> typedef int ElemType; //定义结点类型 typedef struct Node { ElemType data; struct Node *next; }Node,*LinkedList; int count = 0; //1.单循环链表的初始化 LinkedList init_ci

【数据结构-队列】循环队列

关于循环队列 循环队列就是像一个圈一样,可以一直不停的入队和出队,例如:队列已经满了,如果执行一次出队操作,队列头部就空出来了,这时候就可以把元素继续插入空出来的那里,头指针向后移第二个元素就变成的队列的头,上一个对头就变成了队尾 下图中:此时队列已经满了,但是当把12出队后,head指针会指向第1个位置,这是再忘队列中插入元素的,tail就会指向0的位置,然后把元素插入到0的位置. 组成循环队列需要的元素 int data[COUNT];//存放元素 int head;//头指针 int ta

数据结构算法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语言实现

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

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

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

数据结构——队列及循环队列

说明:严蔚敏的<数据结构>(C语言版)学习笔记,记录一下,以备后面查看. #include <stdio.h> #include <stdlib.h> #define OK 1; #define ERROR -1; typedef int QElemType; typedef int Status; //定义队列节点 typedef struct QNode{ QElemType data; struct QNode *next; }QNode, *QueuePtr;

顺序循环队列的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) {