C语言数据结构-队列Queue
#ifndef __LINKQUEUE_H__ #define __LINKQUEUE_H__ #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLF -1 #define OVERFLOW -2 typedef int Status; typedef int QElemType; typedef struct QNode { QElemType data; struct QNode *next; }QNode, *QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; #endif
#include"LinkQueue.h" #include<stdlib.h> #include<stdio.h> Status InitQueue(LinkQueue &Q) { Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode)); if(!Q.front) { exit(OVERFLOW); } Q.front -> next = NULL; return OK; } Status EnQueue(LinkQueue &Q, QElemType e) { QNode *p = (QueuePtr)malloc(sizeof(QNode)); if(!p) { exit(OVERFLOW); } p -> data = e; p -> next = NULL; Q.rear -> next = p; Q.rear = p; return OK; } Status DeQueue(LinkQueue &Q, QElemType e) { if(Q.front == Q.rear) { 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; } void show(LinkQueue Q) { QueuePtr n = Q.front -> next; printf(" ============ Q ============\n"); while(n) { printf("data = %d\n", n -> data); n = n ->next; } } int main() { LinkQueue Q; InitQueue(Q); EnQueue(Q, 1); EnQueue(Q, 2); EnQueue(Q, 3); show(Q); DeQueue(Q, 3); DeQueue(Q, 3); show(Q); return OK; }