链队列的基本操作 C语言

#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct Queue *QPtrl;
typedef QPtrl List;
struct Queue {
    ElemType data;
    QPtrl next;
    List Front, Rear;   //分别是出队和入队的指针
};
//初始化
QPtrl InitQueue() {
    QPtrl L;
    L = (List)malloc(sizeof(struct Queue));
    L->Front = L->Rear = NULL;
    printf("初始化成功\n");
    return L;
}
int InQueue(QPtrl L, ElemType x) {
        List s;
        s = (List)malloc(sizeof(struct Queue));
        s->data = x;
        s->next = NULL;
        if (L->Rear == NULL) {     //如果是第一次入队
            L->Front = L->Rear = s;
        }
        else {                     //非第一次入队
            L->Rear->next = s;     
            L->Rear = s;           //Rear指向最后
        }
    return 1;
}
//出队
int DeQueue(QPtrl L) {
    List P;
    ElemType e;
    if (L->Front == NULL) {     //队列为空
        return 0;
    }
    if (L->Front == L->Rear) { //队列只有一个元素
        L->Front = L->Rear = NULL;
    }                         //有多个元素
    P = L->Front;               
    L->Front = L->Front->next;
    free(P);
    return 1;
}
//求队列长度
int QLength(QPtrl L) {
    int i = 0;
    List P;
    P = L->Front;
    while (P!=NULL) {
        i++;
        P = P->next;
    }
    printf("队列长%d\n", i);
}
int main() {
    QPtrl L;
    L = InitQueue();
    InQueue(L, 1);
    InQueue(L, 2);
    InQueue(L, 3);
    DeQueue(L);
    DeQueue(L);
    QLength(L);
}

 

posted @ 2017-10-24 15:23  禹某  阅读(2939)  评论(0编辑  收藏  举报