ADT

来源:互联网 发布:数码宝贝网络侦探进化 编辑:程序博客网 时间:2024/06/10 02:01
//ADT  LinkQueue#define     OK                     1#define     ERROR              0#define     TRUE                 1#define     FALSE               0#define     OVERFLOW     -1typedef int QElemType;typedef int Status;typedef struct QNode {    QElemType data;    struct QNode *next;}QNode, *QueuePtr;typedef struct {    QueuePtr front;//头指针    QueuePtr reer;//尾指针}LinkQueue;//构造一个空队列Status InitQueue(LinkQueue &Q) {    Q.front = Q.reer = (QNode *)malloc(sizeof(QNode));    if(!Q.front) exit(OVERFLOW);    Q.front->next = NULL;    return OK;}//销毁队列QStatus DestroyQueue(LinkQueue &Q) {    QueuePtr p = Q.front, postp;    while(p) {        postp = p->next;        free(p);        p = postp;    }     Q.front = Q.reer = NULL;    return OK;}//清空队列Status ClearQueue(LinkQueue &Q) {    Q.reer = Q.front;    Q.front->next = NULL;    return OK;}//插入元素Status EnQueue(LinkQueue&Q, QElemType e) {    QueuePtr p = (QNode *)malloc(sizeof(QNode));    if(!p) exit(OVERFLOW);    p->data = e;    p->next = NULL;    Q.reer->next = p;    Q.reer = p;    return OK; }//删除元素Status DeQueue(LinkQueue &Q,QElemType &e) {    if(Q.front == Q.reer) return ERROR;    QueuePtr p = Q.front->next;    e = p->data;    Q.front->next = p->next;    if(Q.reer == p) {        Q.reer = Q.front;    }    free(p);    return OK;}//判断队列是否为空Status QueueEmpty(LinkQueue Q) {    if(Q.front == Q.reer) return TRUE;    return FALSE;}//求队列长度int QueueLength(LinkQueue Q) {    int cnt = 0;    QueuePtr p = Q.front->next;    while(p) {        cnt++;        p = p->next;    }    return cnt;}//求队头元素的值Status GetHead(LinkQueue Q, QElemType &e) {    if(Q.front == Q.reer) return ERROR;    QueuePtr p = Q.front->next;    e = p->data;    free(p);    return OK;}//遍历Status QueueTraverse(LinkQueue Q) {    QueuePtr p = Q.front->next;    while(p) {        if(p == Q.front->next)cout << p->data;        else cout << ' ' << p->data;        p = p->next;    }    cout << endl;}

原创粉丝点击