【学习点滴-数据结构-栈&队列】 链式队列的实现及应用

来源:互联网 发布:淘宝小二联系方式 编辑:程序博客网 时间:2024/05/05 15:02

队列的链式实现源码如下:这是之后的链队列操作的基础。

#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0#define QOVERFLOW -1 typedef int QElem,Status;typedef struct QNode{    QElem data;    QNode *next;           }QNode,*QueuePtr;typedef struct{    QueuePtr front;    QueuePtr rear;        }Queue;Status InitQueue(Queue &q){    q.rear = q.front = (QueuePtr)malloc(sizeof(QNode));    if(!q.front){        exit(QOVERFLOW);                             }    q.front->next = NULL;    return OK;      }Status EnQueue(Queue &q,QElem e){    QueuePtr node = (QueuePtr)malloc(sizeof(QNode));    if(!node){        exit(QOVERFLOW);              }    node->data = e;    node->next = NULL;    q.rear->next = node;    q.rear = node;    return OK;       }Status QueueEmpty(Queue q){    return (q.front == q.rear);   }Status DeQueue(Queue &q,QElem &e){    if(QueueEmpty(q)){         return ERROR;    }           QueuePtr p = q.front->next;//待删除节点     e = p->data;    q.front->next = p->next;    if(q.rear == p){//是否只有一个元素          q.rear = q.front;    }    free(p);    return OK;  }Status DestroyQueue(Queue &q){    while(q.front){        q.rear = q.front->next;        free(q.front);        q.front = q.rear;        }    return OK;   } void visit(QueuePtr node){     printf("visit % d \n",node->data); } Status QueueTraverse(Queue q){     QueuePtr node = q.front->next;     while(node){          visit(node);          node = node->next;         }      } Status GetHead(Queue q,QElem &e){     if(QueueEmpty(q)){         return ERROR;                       }     QueuePtr p = q.front->next;     e = p->data;      } main(){    Queue queue;    InitQueue(queue);    int rands,res;     for(int i = 0;i<100;i++){        rands = rand()%1000;        EnQueue(queue,rands);        GetHead(queue,res);        printf("入队:%d 队头:%d\n",rands,res);      }    while(!QueueEmpty(queue)){        GetHead(queue,res);                 DeQueue(queue,rands);         printf("队头:%d 出队: %d\n",res,rands);       }    system("pause");    return 0;        } 


原创粉丝点击