c语言版数据结构(奇迹冬瓜)-单链式队列

来源:互联网 发布:海岛奇兵火炮数据 编辑:程序博客网 时间:2024/05/17 06:04

   (一)

     队列(FIFO)先进先出模式,包含初,毁,清,空,长,得,进,出。八种基本操作。现以两种存储方式为例,来讲解队列的用法。

   (二)

     单 链式存储结构 

//----头文件-----#include<stdio.h>#include<stdlib.h>//-----宏定义-----#define TURE 1#define ERROR 0#define OVERFLOW -2//-----结构体及替换-----typedef int Bool;typedef struct QNode{int data;struct QNode *next;}QNode,*QueuePtr;typedef struct{QueuePtr front;QueuePtr rear;}LinkQueue;

     壹。初(初始化队列)

    (图1)

Bool InitQueue(LinkQueue *Q){if(!(Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode)))){exit(OVERFLOW);}Q->front->next=NULL;return TURE;}

    贰。 毁(销毁队列)

Bool DestroyQuueue(LinkQueue *Q){while(Q->front){Q->rear=Q->front->next;free(Q->front);Q->front=Q->rear;}return TURE;}

    叁。清(清空队列)

Bool ClearQueue(LinkQueue *Q){if(Q->front!=Q->rear){Q->rear=Q->front;Q->front=NULL;}return TURE;}

    肆。空(判断空队列)

Bool QueueEmpty(LinkQueue Q){return Q.front==Q.rear?TURE:ERROR;}

    伍。长(返回队列长)

int QueueLength(LinkQueue Q){int length=0;QueuePtr PStart=Q.front->next;while(Q.rear!=PStart){length++;PStart=PStart->next;}return length;}

    陆。得(得到队列头)

Bool GetHead(LinkQueue Q,int *e){if(Q.front==Q.rear){return ERROR;}*e=Q.front->data;return TURE;}

    柒。进(进入队列)

Bool EnQueue(LinkQueue *Q,int e){QueuePtr p=(QueuePtr)malloc(sizeof(QNode));if(!p){exit(OVERFLOW);}p->data=e;p->next=NULL;Q->rear->next=p;Q->rear=p;return TURE;}

    捌。出(走出队列)

Bool DeQueue(LinkQueue *Q,int *e){QueuePtr p;if(Q->front==Q->rear){return ERROR;}p=Q->front->next;Q->front->next=p->next;if(Q->rear==p){Q->rear=Q->rear;}free(p);return TURE;}