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 ============
");
	while(n) {
		printf("data = %d
", 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;
}

  

原文地址:https://www.cnblogs.com/maduar/p/13205656.html