数据结构——顺序队列(sequence queue)

/* sequenceQueue.c */
/* 顺序队列 */

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define MAXSIZE 100

/* 顺序循环队列数据结构 */
/* 一个圆圈,front指向队列头,rear指向队列尾 */
/*
    front     ->       ...         -> rear
    data[0] ->    data[...]    -> data[n]
*/
typedef struct {
    int data[MAXSIZE];
    int rear, front;
    int num;              /* 队列元素的个数 */
} SeqQueue;

void interface(void);
/* 顺序列表函数声明 */
SeqQueue *initializeSeqQueue();
bool isFullSeqQueue(SeqQueue*);
bool isEmptySeqQueue(SeqQueue*);
void inSeqQueue(SeqQueue*, int);
int outSeqQueue(SeqQueue*);

int main(){
    SeqQueue *sq = initializeSeqQueue();
    int flag, number;

    interface();
    for(;;){
        printf("Command: ");
        scanf("%d", &flag);
        switch(flag){
            case 0: printf("Bye!\n"); return 0; break;
            case 1:
                if(isFullSeqQueue(sq))
                    printf("Queue is full!\n");
                else{
                    printf("Enter number: ");
                    scanf("%d", &number);
                    inSeqQueue(sq, number);
                }
                break;
            case 2:
                if(isEmptySeqQueue(sq))
                    printf("Queue is empty!\n");
                else{
                    printf("value: %d\n", outSeqQueue(sq));
                }
                break;
        }
    }

    return 0;
}

void interface(void){
    puts("+********************+");
    puts("+  0, quit  退出     +");
    puts("+  1, in    入队     +");
    puts("+  2, out   出队     +");
    puts("+********************+");
}
/* 顺序列表函数实现 */
/* 初始化顺序列表,列表为空,front和read都为-1,num为0 */
SeqQueue *initializeSeqQueue(){
    SeqQueue *sq = (SeqQueue*)malloc(sizeof(SeqQueue));
    sq->front = sq->rear = -1;
    sq->num = 0;
    return sq;
}
/* 判断队列是否为空 */
bool isEmptySeqQueue(SeqQueue *sq){
    if(sq->num==0)
        return true;
    return false;
}
/* 判断队列是否已满 */
bool isFullSeqQueue(SeqQueue *sq){
    if(sq->num==MAXSIZE)
        return true;
    return false;
}
/* 入队 */
void inSeqQueue(SeqQueue *sq, int number){
    /* 循环队列,取余MAXSIZE */
    sq->rear = sq->rear+1 % MAXSIZE;
    sq->data[sq->rear] = number;
    sq->num++;
}
/* 出队 */
int outSeqQueue(SeqQueue *sq){
    sq->front = sq->front+1 % MAXSIZE;
    sq->num--;
    return sq->data[sq->front];
}

原文地址:https://www.cnblogs.com/noonjuan/p/11493507.html

时间: 2024-12-17 19:20:28

数据结构——顺序队列(sequence queue)的相关文章

顺序队列(Sequential Queue)

顺序队列(Sequential Queue) 1. 顺序队列的概念 1.1 顺序队列的定义 顺序队列是基于数组的存储表示实现的队列. 1.2 顺序队列中各元素的逻辑及存储关系 顺序队列可以采用顺序表作为其存储表示,因此,可以在顺序队列的声明中用顺序表定义它的存储空间. 顺序队列可以使用一维数组作为队列的存储空间,存放队列元素的数组的头指针为*elements,该数组的最大允许存放元素个数为maxSize,当前队列的队头位置由数组下标指针front指示,队尾位置由数组下标指针rear指示,如果队列

数据结构 - 顺序队列的实行(C语言)

数据结构-顺序队列的实现 1 顺序队列的定义 线性表有顺序存储和链式存储,队列作为一种特殊的线性表,也同样存在这两种存储方式.我们先来看队列的顺序存储结构. 队列的顺序储存结构:用数组存储队列,为了避免当只有一个元素时,队头和队尾重合使得处理变得麻烦,所以引入两个指针:front指针指向队头元素,rear指针指向队尾元素的下一个位置,当front=rear时,为空队列,结构如下图所示. 假设是长度为5的数组,初始状态,空队列如下图左所示,front与 rear指针均指向下标为0的位置.然后入队a

数据结构顺序队列打卡

程序能够运行出来,就是在给队列输入x值的时候不能够输进去,求解! #include<stdio.h>#define maxSize 8typedef int QElemType;typedef struct { QElemType elem[maxSize]; int front,rear;}CircQueue;//初始化void InitQueue (CircQueue &s){ s.front=s.rear=0;} //进队列 int EnQueue (CircQueue &

数据结构-顺序队列

1 #include <iostream> 2 #include <stdlib.h> 3 using namespace std; 4 5 #define maxSize 20 6 7 typedef struct 8 { 9 int data[maxSize]; 10 int front; 11 int rear; 12 }SqQueue; 13 14 void InitQueue(SqQueue &Q) 15 { 16 Q.front=Q.rear=0; 17 } 1

数据结构_线性表_顺序队列_循环队列_链队列

个位看官,由于队列操作相对简单,我啥也不多说,直接上代码,欢迎验证!!! #pragma mark --abstract //队列(queue)是只允许在表的一端进行插入,在表的另一端进行删除的线性表,允许插入的一端称为队尾(rear) //允许删除的一端叫做队头(font),不含元素的队列称为空队列 //队列的特点是先进先出(FIFO线性表) #pragma mark --分类 //1.队列的顺序存储结构称为顺序队列(sequential queue),他是由存放队列的一维数组和分别指向队头和

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

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

数据结构6_顺序队列(循环队列)

本文实现了顺序队列,与链队列不同的是,顺序队列需要考虑一个问题, 问题情况如下, 解决办法:循环队列,当rear到分配的数组空间末尾时,转到数组头 但是当q.rear==q.front时,又如何区分一种是空队列,一种是满队列的情况呢 这里有两种方案 本次代码实现了第一种方法,同时设置了一个技术变量length,稍加改动便可实现第二个方法 代码如下: #include<iostream>using namespace std;//该顺序队列为循环队列,解决队尾指针达到最大值,队列中有空闲单元,但

数据结构--队列实现(顺序队列和链队列)与C++模板

数据结构--队列实现(顺序队列和链队列)与C++模板 一.顺序队列 队列的顺序存储结构称为顺序队列,顺序队列实际上是运算受限的顺序表. ①和顺序表一样,顺序队列用一个向量空间来存放当前队列中的元素. ②由于队列的队头和队尾的位置是变化的,设置两个指针front和rear分别指示队头元素和队尾元素在向量空间中的位置,它们的初值在队列初始化时均应置为0. 注意: ①当头尾指针相等时,队列为空. ②在非空队列里,队头指针始终指向队头元素,尾指针始终指向队尾元素的下一位置.(所以以下循环顺序队列中当队尾

【数据结构】顺序队列的实现(c++)

头文件: #pragma once #include <iostream> #include <assert.h> using namespace std; template<class Type> class SeqQueue { public: SeqQueue(size_t sz = INIT_SZ); ~SeqQueue(); public: bool empty()const; bool full()const; void show()const; bool