链式队列


#include 
#include 

typedef struct Node {
    int data;
    struct Node *next;
} LinkNode;

typedef struct {
    LinkNode *front, *rear;
} LinkQueue;

// 带头结点
int InitQueue(LinkQueue *q) {
    q->front = q->rear = (LinkNode *)malloc(sizeof(LinkNode));
    if (q->front == NULL) return -1;
    q->front->next = NULL;
    return 1;
}

// 带头结点
int EnQueue(LinkQueue *q, int e) {
    LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
    if (s == NULL) return -1;
    q->rear->next = s;
    q->rear = s;
    s->next = NULL;
    s->data = e;
    return 1;
}

// 带头结点
int DeQueue(LinkQueue *q, int *e) {
    if (q->front == q->rear) return -1;
    LinkNode *p = q->front->next;
    *e = p->data;
    q->front->next = p->next;
    if (q->rear == p) {
        q->rear = q->front;
    }
    free(p);
    return 1;
}

// 不带头结点
int InitQueue1(LinkQueue *q) {
    q->front = q->rear = NULL;
    return 1;
}

// 不带头结点
int EnQueue1(LinkQueue *q, int e) {
    LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
    if (s == NULL) return -1;
    s->next = NULL;
    s->data = e;
    if (q->front == NULL) {
        q->front = s;
        q->rear = s;
    } else {
        q->rear->next = s;
        q->rear = s;
    }
    return 1;
}

// 不带头结点
int DeQueue1(LinkQueue *q, int *e) {
    if (q->front == NULL) return -1;
    LinkNode *p = q->front;
    q->front = p->next;
    *e = p->data;
    if (q->rear == p) {
        q->front = NULL;
        q->rear = NULL;
    }
    free(p);
    return 1;
}

// 带头结点
int Empty(LinkQueue q) {
    if (q.front == q.rear) return 1;
    else return -1;
}

// 不带头结点
int Emptyq(LinkQueue q) {
    if (q.front == NULL) return 1;
    else return -1;
}

int main() {
    LinkQueue q;
    InitQueue(&q);
    return 0;
}

你可能感兴趣的:(链式队列)