栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构-队列

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构-队列

sequential queue
#include
#include
#include
typedef int Status;
#define OK 1
#define ERROR 0
#define OVERFLOW -1
using namespace std;
#define MAXQSIZE 6
typedef struct ElemType{
    int data;
}ElemType;
typedef struct SeqQueue{
    ElemType *pbase;
    int front;
    int rear;
}SeqQueue;
class ClassSeqQueueManager{
    public:
    Status InitQueue(SeqQueue &Q){
        Q.pbase=(ElemType *)malloc(MAXQSIZE*sizeof(ElemType));
        Q.front=0;
        Q.rear=0;
        return OK;
    }
    Status InQueue(SeqQueue &Q,ElemType e){
        if((Q.rear+1)%MAXQSIZE==Q.front) return ERROR;
        Q.pbase[Q.rear]=e;
        Q.rear=(Q.rear+1)%MAXQSIZE;
        return OK;
    }
    Status OutQueue(SeqQueue&Q,ElemType &e){
        if(Q.front==Q.rear) return ERROR;//空队列
        e=Q.pbase[Q.front];
        Q.front=(Q.front+1)%MAXQSIZE;
        return OK;
    }
};

最多可容纳MAXQSIZE-1个元素

顺序队列-测试样例
void test(){
    ClassSeqQueueManager CSQM;
    struct SeqQueue sq;
    CSQM.InitQueue(sq);
    for(int i=0;i<5;i++){
        ElemType e;
        e.data=i;
        CSQM.InQueue(sq,e);
    }
    for(int i=0;i<5;i++){
        ElemType e;
        CSQM.OutQueue(sq,e);
        cout< 
linked queue 
#include
#include
#include
using namespace std;
#define MAXQSIZE 6
typedef int Status;
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef struct
{
	int data;
}ElemType;
typedef struct LNode//单链表节点
{
	ElemType data;//数据域
	struct LNode* next;//指针域
}LNode, *QueuePtr;
typedef struct linkQueue{
    QueuePtr front;
    QueuePtr rear;
}linkQueue;
class ClasslinkedQueueManager{
    public:
    Status InitQueue(linkQueue &Q){
        Q.front=Q.rear=(LNode*)malloc(sizeof(LNode));
        if(Q.front==NULL) exit(OVERFLOW);
        Q.front->next=NULL;
        return OK;
    }
    Status InQueue(linkQueue &Q,ElemType e){
        LNode *s=(LNode*)malloc(sizeof(LNode));
        if(s==NULL) exit(OVERFLOW);
        s->data=e;
        Q.rear->next=s;
        Q.rear=s;
        return OK;
    }
    Status OutQueue(linkQueue &Q,ElemType &e){
        if(Q.front==Q.rear) return ERROR;
        LNode* p=Q.front->next;
        e=p->data;
        Q.front->next=p->next;
        if(Q.rear==p) Q.rear=Q.front;//if front->p=rear
        free(p);
        return OK;
    }
};

测试
void test(){
    ClasslinkedQueueManager CLQM;
    linkQueue lq;
    CLQM.InitQueue(lq);
    for(int i=0;i<5;i++){
        ElemType e;
        e.data=i;
        CLQM.InQueue(lq,e);
    }
    for(int i=0;i<5;i++){
        ElemType e;
        CLQM.OutQueue(lq,e);
        cout<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/297966.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号