C++實現順序隊列(循環) 鏈隊列

鏈隊列

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;

typedef int ElemType;
struct LinkNode{
    ElemType data;
    struct LinkNode *next;
};
typedef struct{
    LinkNode *myFront,*rear;
}LinkQueue;

void InitQueue(LinkQueue &Q){
    Q.myFront = Q.rear =  (LinkNode*)malloc(sizeof(LinkNode));
    Q.myFront->next = NULL;
}
bool IsEmpty(LinkQueue Q){
    if(Q.myFront==Q.rear)
        return true;
    return false;
}
void EnQueue(LinkQueue &Q,ElemType x){
    LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
    s->data = x;
    s->next = NULL;
    Q.rear->next = s;
    Q.rear = s;
}
bool DeQueue(LinkQueue &Q,ElemType &x){
    if(Q.myFront==Q.rear)
        return false;
    LinkNode *p = Q.myFront->next;
    x = p->data;
    Q.myFront->next = p->next;
    if(Q.rear==p)
        Q.rear =Q.myFront;
    free(p);
    return true;
}
int main()
{
    LinkQueue Q;
    InitQueue(Q);
    EnQueue(Q,100);
    int value;
    DeQueue(Q,value);
    printf("%d\n",value);
    return 0;
}

順序隊列

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 50
using namespace std;

typedef int ElemType;
typedef struct
{
    ElemType data[MaxSize];
    int myFront,rear;
} SqQueue;

void InitQueue(SqQueue &Q)
{
    Q.rear=Q.myFront=0;
}
bool isEmpty(SqQueue &Q)
{
    if(Q.rear==Q.myFront)
        return true;
    return false;
}

bool EnQueue(SqQueue &Q,ElemType e)
{
    if((Q.rear+1)%MaxSize==Q.myFront)
        return false;
    Q.data[Q.rear] = e;
    // 很關鍵
    Q.rear = (Q.rear+1)%MaxSize;
    return true;
}
bool DeQueue(SqQueue &Q,ElemType &x)
{
    if(Q.rear==Q.myFront)
        return false;
    x = Q.data[Q.myFront];
    Q.myFront = (Q.myFront+1)%MaxSize;
    return true;
}
bool GetHead(SqQueue &Q,ElemType &x)
{
    if(Q.rear==Q.myFront)
        return false;
    else
    {
        x = Q.data[Q.myFront];
        return true;
    }
}
int main()
{
    SqQueue Q;
    InitQueue(Q);
    EnQueue(Q,100);
    EnQueue(Q,200);
    int valueOne;
    GetHead(Q,valueOne);
    int value;
    DeQueue(Q,value);
    printf("%d\n",value);
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章