【数据结构】队列

队列:具有一定操作约束的线性表。(只能在一段插入,在另一端删除)

1、Queue CreatQueue(int MaxSize);    //生成长度为MaxSize的空队列;

2、int IsFullQ(Queue Q,int MaxSize);      //判断队列Q是否已满;

3、void AddQ(Queue Q,ElementType item);      //将数据元素item插入到队列Q中;

4、int IsEmptyQ(Queue Q);   //判断队列Q是否为空;

5、ElementType DeleteQ(Queue Q);     //将队头数据元素从队列中删除并返回。

队列的顺序存储实现:队列的顺序存储结构通常由一个一维数组和一个记录队列头元素位置的变量front以及一个记录队列尾元素位置的变量rear组成。

#define MaxSize <存储数据元素的最大个数>
struct QNode{
    ElementType Data[MaxSize];
    int rear;
    int front;
};
typedef struct QNode* Queue;

队列又分为直队列和顺环队列。

注意:顺环队列通常只使用(n-1)个数据空间。

队列的链式存储实现:队列的链式存储结构也可以用一个单链表实现。插入和删除操作分别在链表的两头进行。(插入rear后移,删除front后移,由链表只能联系后序节点的特点可知,front指向链表头,rear指向链表尾)

struct Node{
    ElementType Data; 
    struct Node* Next;
};
struct QNode{
    struct Node* rear;    
    struct Node* front;
};
typedef struct QNode* Queue;
Queue PtrQ;

 不带头节点的链式队列出队操作的一个示例:

ElementType Delete(Queue PtrQ){
    struct Node* FrontCell;
    ElementType FrontElem;

    if(PtrQ->front==NULL){
        printf("队列空");
        return ERROR;
    }
    FrontCell=PtrQ->front;
    if(PtrQ->front==PtrQ->rear){         //若队列只有一个元素
        PtrQ->front=PtrQ->rear=NULL;     //删除后队列置为空
    }
    else{
        PtrQ->front=PtrQ->front->Next;
    }
    FrontElem=FrontCell->Data;
    free(FrontCell);                    //释放被删除节点空间
    return FrontElem;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值