数据结构--队列

来源:互联网 发布:淘宝开店怎么开 编辑:程序博客网 时间:2024/04/30 13:29
// queue.cpp : Defines the entry point for the console application./*-----CODE FOR FUN----------------------CREATED BY Dream_Whui---------2015-1-25--------------------*/#include "stdafx.h"#include <stdlib.h>#include <iostream>using namespace std;#define   TRUE              1#define   FALSE             0#define   OK                 1#define   ERROR            0#define   OVERFLOW   -2#define   INFEASIBLE   -1#define QElemType char //定义队列元素的类型typedef struct QNode//定义结点的结构{    QElemType data;    QNode *next;}QNode,*QueuePtr;typedef struct LinkQueue//定义队列结构{    QueuePtr front;    QueuePtr rear;}LinkQueue;int InitQueue(LinkQueue &Q)//初始化队列{    Q.front = (QueuePtr)malloc(sizeof(QNode));    if(!Q.front)        return ERROR;    Q.rear  = Q.front;    Q.front->next = NULL;    return OK;}int DestroyQueue(LinkQueue &Q)//销毁队列{    while(Q.front)    {        Q.rear = Q.front->next;        free (Q.front);        Q.front = Q.rear;    }    return OK;}int InsertQueue(LinkQueue &Q, QElemType e)//在对尾插入元素{    QueuePtr p = (QueuePtr)malloc(sizeof(QNode));    if(!p)        return ERROR;    p->data = e;    p->next = NULL;    Q.rear->next = p;    Q.rear = p;    return OK;}int DeleteQueue(LinkQueue &Q, QElemType &e)//在对头删除元素{    if(Q.front == Q.rear)        return ERROR;    QueuePtr p = (QueuePtr)malloc(sizeof(QNode));    if(!p)        return ERROR;    p = Q.front->next;    e = p->data;    Q.front->next = p->next;    if(Q.rear == p)        Q.rear = Q.front;    free(p);    return OK;}int QueueEmpty(LinkQueue &Q)//判断队列是否空{    if(Q.front == Q.rear)        return OK;    else        return ERROR;}int QueueLength(LinkQueue &Q)//队列的长度{    QueuePtr p = Q.front;    int num = 0;    while(p != Q.rear)    {        num++;        p = p->next;    }    return num;}QElemType GetHead(LinkQueue &Q, QElemType &e)//获取对头元素{    if(!QueueEmpty(Q))        return e = Q.front->next->data;    else        return ERROR;}int main(int argc, char* argv[]){    LinkQueue Q;    InitQueue(Q);    InsertQueue(Q,'W');    InsertQueue(Q,'A');    InsertQueue(Q,'D');    InsertQueue(Q,'F');    QueuePtr p = Q.front;    cout<<QueueLength(Q)<<endl;;    while(p != Q.rear)    {        cout<<p->next->data<<" ";        p = p->next;    }    cout<<endl;    char e;    DeleteQueue(Q,e);    cout<<e<<endl;    p = Q.front;    while(p != Q.rear)    {        cout<<p->next->data<<" ";        p = p->next;    }    cout<<endl;    GetHead(Q,e);    cout<<e<<endl;    return 0;}

0 0