队列的实现

在这里插入图片描述

数组实现

#include <stdio.h>
#include <stdlib.h>
typedef int Position;
typedef int ElementType;
struct QNode{
    ElementType* Data;
    Position Head,Tail;
    int MaxSize;
};
typedef struct QNode* Queue;
/*创建一个空队列*/
Queue CreateQueue(int MaxSize){
    Queue q = (Queue)malloc(sizeof(struct QNode));
    q->Data =(ElementType *) malloc(MaxSize*sizeof(ElementType));
    q->Head = 0;q->Tail = 0;
    q->MaxSize = MaxSize;
    return q;
}
/*判断队列是否为空*/
int IsFullQ(Queue q){
    return ((q->Tail+1)%q->MaxSize == q->Head );
}
/*入队操作,插入队尾*/
int AddQ(Queue q,ElementType item){
    if(IsFullQ(q)){
        return 0;
    }
    q->Data[q->Tail++] = item;
    q->Tail=q->Tail%q->MaxSize;
    return 1;
}
/*判断队列是否为空*/
int IsEmpty(Queue q){
    return (q->Tail == q->Head );
}

/*删除队头元素*/
ElementType DeleteQ(Queue q){
	//此处缺少队列满校验
    ElementType e = q->Data[q->Head];
    q->Head++;
    q->Head=(q->Head)%q->MaxSize;
    return e;
}
链表的实现
#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;

typedef struct Node1* ONode;
typedef struct QNode* Queue;

struct Node1{
    ElementType Data;
    ONode Link;
};
struct QNode{
    ONode Head,Tail;
};

/*创建一个空队列*/
Queue CreateQueue(int MaxSize){
    Queue q = (Queue)malloc(sizeof(struct QNode));
    q->Head = NULL;
    q->Tail = NULL;
    return q;
}
/*判断队列是否为空*/
int IsFullQ(Queue q){
    return 0;
}
/*判断队列是否为空*/
int IsEmpty(Queue q){
    return ( q->Head == NULL );
}
/*入队操作,插入队尾*/
int AddQ(Queue q,ElementType item){
    ONode oq = (ONode)malloc(sizeof(struct Node1));
    oq ->Data = item;

    if(IsEmpty(q)){
        oq ->Link = NULL;
        q->Head = oq;
        q->Tail = oq;
    }else{
        q->Tail ->Link = oq;
        q->Tail = oq;
    }
    return 1;
}


/*删除队头元素*/
ElementType DeleteQ(Queue q){

    ONode removeNode=q->Head;
    if(q->Head == q->Tail){
        q->Head = NULL;
        q->Tail = NULL;
    }else{
        q->Head = q->Head->Link;
    }
    ElementType e = removeNode->Data;
    free(removeNode);
    return e;
}


int main(){
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值