3.2.1队列的定义

3.2.1队列的定义

1779175850045

1779175884756

1779175934416

1779175990925

1779176036371

1779176051589

3.2.2 队列的顺序实现

1779176073395

#define MaxSize 10//定义队列中元素的最大个数
typedef struct{
    ElemType data[MaxSize];//用静态数组存放队列元素
    int front,rear;//队头指针和队尾指针
}SqQueue;

void InitQueue(SqQueue &Q){
    //初始时 队头队尾指针指向0
    Q.rear=Q.front=0;
}

void testQueue(){
    //声明一个队列 (顺序存储)
    SqQueue Q;
    InitQueue(Q);
    //...后续操作...
}

//判断队列是否为空
bool QueueEmpty(SqQueue Q){
    if(Q.rear==Q.front)//队空条件
        return true;
    else
        return false;
}

1779176280895

1779176612406

入队操作

#define MaxSize 10//定义队列中元素的最大个数
typedef struct{
    ElemType data[MaxSize];//用静态数组存放队列元素
    int front,rear;//队头指针和队尾指针
}SqQueue;

//入队
bool EnQueue(SqQueue &Q,Elemtype x){
	if(队列已满)
        return false;//队满则报错
    Q.data[Q.rear]=x;//新元素插入队尾
    Q.rear=QQ.rear+1%MaxSize;//队尾指针加1取模
    return true;
}

1779177084934

1779177159407

1779177172189

1779177236759

判断队列已满/已空

1779177322260

1779177378094

1779177434549

1779177512291

1779177541914

1779177594339

1779177599971

1779177630371

3.2.3队列的链式实现

1779177770714

typedef struct LinkNode{//链式队列结点
    ElemTpye data;
    struct LinkNode *next;
}LinkNode;

typedef struct{//链式队列
    LinkNode *front,*rear;//队列的队头和队尾指针
}LinkQueue;

1779179121391

typedef struct LinkNode{//链式队列结点
    ElemTpye data;
    struct LinkNode *next;
}LinkNode;

typedef struct{//链式队列
    LinkNode *front,*rear;//队列的队头和队尾指针
}LinkQueue;

//初始化队列(带头结点)
void InitQueue(LinkQueue &Q){
    //初始时 front、rear 都指向头节点
    Q.front = Q.rear = (LinkNode *)malloc(sizeof(LinkNode));
    Q.front->next=NULL;
}

void testLinkQueue(){
    LinkQueue Q;//声明一个队列
    InitQueue(Q);//初始化队列
    //...后续操作...
}

//判断队列是否为空
bool IsEmpty(LinkQueue Q){
    if(Q.front==Q.rear)
        return true;
    else
        return false;
}

1779179492140

初始化(不带头节点)

void InitQueue(LinkQueue &Q){
    //初始时 front、rear 都指向头节点
    Q.front = NULL;
    Q.rear = NULL;
}
//判断队列是否为空(不带头节点)
bool IsEmpty(LinkQueue Q){
    if(Q.front==NULL)
        return true;
    else
        return false;
}

1779179758138

入队(带头节点)

//新元素入队(带头结点)
void EnQueue(LinkQueue &Q,ElemType x){
    LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));
    s->data=x;
    s->next=NULL;
    Q.rear->next=S;//新结点插入到rear之后
    Q.rear=s;//修改表尾指针
}

1779180840161

//新元素入队(不带头结点)
void EnQueue(LinkQueue &Q,ElemType x){
    LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));
    s->data=x;
    s->next =NULL;
    if(Q.front == NULL){//在空队列中插入第一个元素
		Q.front = s;//修改队头队尾指针
        Q.rear=s;
    }else{
        Q.rear->next=s;//新结点插入到rear结点之后
        Q.rear=s;//修改rear指针
    }
}

1779187284101

出队(带头结点)

//队头元素出队(不带头结点)
bool DeQueue(LinkQueue &Q,ElemType &x){
	if(Q.front==Q.rear)
        return false;//空队
    LinkNode *p=Q.front->next;
    x=p->data;//用变量x返回结点的next指针
    Q.front->next=p->next;//修改头结点的next指针
    if(Q.rear==p)//此次是最后一个结点出队
        Q.rear=Q.front;//修改rear指针
    free(p);//释放结点空间
    return true;
}

1779187749274

出队(不带头结点)

//队头元素出队(不带头结点)
bool DeQueue(LinkQueue &Q,ElemType &x){
    if(Q.front==NULL)
        return false;//空队
    LinkNode *p = Q.front;//p指向此次出队的结点
    x=p->data;//用变量x返回队头元素
    Q.front = p->next;//修改front指针
    if(Q.rear == p){//此次是最后一个结点对队
        Q.front = NULL;//front 指向NULL
        Q.rear =NULL;//rear指向NULL
    }
    free(p);//释放结点空间
    return true;
}



1779188184626

1779188225722

1779188230860

3.2.4双端队列

1779242108859

1779242132007

1779242225803

1779242357365

1779242399155

1779242422116

posted @ 2026-05-19 19:05  轻狂书生han  阅读(21)  评论(0)    收藏  举报