数据结构:用数组实现的定容队列

#ifndef SQ_QUEUE_HEAD
#define SQ_QUEUE_HEAD
#include <stdio.h>
#define Status int
#define OVERFLOW -1
#define OK 0
#define ERROR 1
#define QUEUE_INIT_SIZE 10
typedef int ElemType;

typedef struct {
    ElemType data[QUEUE_INIT_SIZE];
    int front;//头指针,指向第一个元素
    int rear;//尾指针,指向下一个可分配的单元
    int size;//已分配的容量
} SqQueue;

Status init(SqQueue *q)
{
    q->front = 0;
    q->rear  = 0;
    q->size  = QUEUE_INIT_SIZE;
    return OK;
}

Status destroy(SqQueue *q)
{
    q->front = 0;
    q->rear  = 0;
    return OK;
}

Status push(SqQueue *q, ElemType e)
{
    //队列满
    if ((q->rear + 1) % q->size == q->front) return OVERFLOW;

    //将e写入尾指针指向的单元,然后尾指针后移
    q->data[q->rear++] = e;

    //如果向后溢出则移到0号单元
    if (q->rear == q->size) q->rear = 0;
    return OK;
}

Status pop(SqQueue *q, ElemType *e)
{
    //队列空
    if (q->rear == q->front) return OVERFLOW;

    //获取front指针指向的单元的值,然后front后移
    *e = q->data[q->front++];

    //将已出队的单元置0
    q->data[q->front-1] = 0;

    //如果frong指针溢出则移到0号单元
    if (q->front == q->size) q->front = 0;
    return OK;
}
时间: 2024-10-14 06:08:34

数据结构:用数组实现的定容队列的相关文章

基于数组实现Java 自定义Queue队列及应用

Java 自定义队列Queue: 队列的抽象数据类型就是一个容器,其中的对象排成一个序列,我们只能访问和取出排在最前端( Front)的对象,只能在队列的尾部( Rear)插入新对象.正是按照这一规则,才能保证最先被插入的对象首先被删除( FIFO).java本身是有自带Queue类包,为了达到学习目的已经更好深入了解Queue队列,自己动手自建java Queue类是个很好的学习开始: 基于数组的实现 ? 顺序数组 借助一个定长数组 Q 来存放对象,即可简单地实现队列.那么,为了符合 FIFO

数据结构Java实现07----队列:顺序队列&amp;顺序循环队列、链式队列、顺序优先队列

数据结构Java实现07----队列:顺序队列&顺序循环队列.链式队列.顺序优先队列 一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作. 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头.队列的插入操作通常称作入队列,队列的删除操作通常称作出队列. 下图是一个依次向队列中插入数据元素a0,a1,...,an-

浅谈算法和数据结构(1):栈和队列

浅谈算法和数据结构(1):栈和队列 2014/11/03 ·  IT技术                                         · 2 评论                                      ·  数据结构, 栈, 算法, 队列 分享到: 60 SegmentFault D-Day 2015 北京:iOS 站 JDBC之“对岸的女孩走过来” CSS深入理解之relative HTML5+CSS3实现春节贺卡 原文出处: 寒江独钓   欢迎分享原创

泛型定容栈

import java.util.*; //泛型定容栈 //泛型:类型参数化,便于处理不同类型的数据 public class FixedCapacityStack<Item> { private Item[] a; private int N; public FixedCapacityStack(int cap){ // java中不允许直接创建泛型数组,此处用类型转换来实现 // 这样写会有警告,但可以忽略之 a=(Item[]) new Object[cap]; } public boo

探究一种定长队列操作(C语言版本)

一 问题来源:南京烽火通信面试 二 问题: 现有一种定长队列,长度为2的n次方,此队列可被多线程访问,但必须确保线程级安全,即在任意时刻,队列的长度保持不变. 三 笔者分析 1. 队列的存储结构--链式和顺序均可. 2. 长度为2的n次方--便于移动队头和队尾指针,假设队列长度为size,那么rear = (rear + 1) & (size - 1),&运算比算术求模运算效率高.为此,笔者使用了顺序队列. 3. 怎么确保线程级安全 笔者认为此系统一定同时存在多个读者和写者,读者是读取队头

小猪的数据结构辅助教程——3.1 栈与队列中的顺序栈

小猪的数据结构辅助教程--3.1 栈与队列中的顺序栈 标签(空格分隔): 数据结构 本节学习路线图与学习要点 学习要点 1.栈与队列的介绍,栈顶,栈底,入栈,出栈的概念 2.熟悉顺序栈的特点以及存储结构 3.掌握顺序栈的基本操作的实现逻辑 4.掌握顺序栈的经典例子:进制变换的实现逻辑 1.栈与队列的概念: 嗯,本节要进行讲解的就是栈 + 顺序结构 = 顺序栈! 可能大家对栈的概念还是很模糊,我们找个常见的东西来拟物化~ 不知道大家喜欢吃零食不--"桶装薯片"就可以用来演示栈! 生产的时

小猪的数据结构辅助教程——3.2 栈与队列中的链栈

小猪的数据结构辅助教程--3.2 栈与队列中的链栈 标签(空格分隔): 数据结构 1.本节引言: 嗯,本节没有学习路线图哈,因为栈我们一般都用的是顺序栈,链栈还是顺带提一提吧, 栈因为只是栈顶来做插入和删除操作,所以较好的方法是将栈顶放在单链表的头部,栈顶 指针与单链表的头指针合二为一~所以本节只是讲下链栈的存储结构和基本操作! 2.链栈的存储结构与示意图 存储结构: typedef struct StackNode { SElemType data; //存放的数据 struct StackN

定容字符串栈

import java.util.Scanner; public class FixedCapacityStackOfStrings { private String[] a; private int N; public FixedCapacityStackOfStrings(int cap){ a=new String[cap]; } public boolean isEmpty() { return N==0; } public int size() { return N; } public

剑指offer-第二章数据结构(数组,字符串,链表,树,栈与队列)及例题

一.数组(最简单的数据结构) 定义:占据一块连续内存并按照顺序存储数据.创建时先指定大小,分配内存. 优点:时间效率高.实现简单的hash(下标为key,对应的数据为value) 缺点:空间效率差.如果我们只在数组中存一个数字,也先分配所有的内存. 扩展:动态数组(解决空间效率差),手段:扩容后,复制内容到新的数组,释放之前的内存.时间性能变差,因此,要尽量减少改变数组容量的次数. 数组与指针:声明一个数组时,数组名字也是一个指针,指向数组的第一个元素. 例题:在一个二维数组中,每一行都按照从左