数据结构—顺序表,链表实现队列

顺序表实现队列

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

#define maxsize 110
#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef int Status;
typedef int QElemType;

typedef struct {
	QElemType *base;
	int front ;
	int rear;
}SqQueue;

Status InitQueue(SqQueue & Q) {
	Q.base = new QElemType[maxsize];
	if (!Q.base) exit(OVERFLOW);
	Q.front = Q.rear = 0;
	return OK;
}

int QueueLenght(SqQueue Q) {
	return (Q.rear - Q.front + maxsize) % maxsize ;
}

Status EnQueue (SqQueue &Q ,QElemType e) {
	if ( (Q.rear + 1 ) % maxsize == Q.front ) return ERROR;
	Q.base[Q.rear] = e;
	Q.rear = ( Q.rear + 1 ) % maxsize ;
	return OK; 
}

Status DeQueue(SqQueue &Q ,QElemType &e) {
	if ( Q.front == Q.rear ) return ERROR;
	e = Q.base[Q.front];
	Q.front = (Q.front + 1 ) % maxsize;
	return OK;
}

Status GetHead(SqQueue Q) {
	if ( Q.front != Q.rear ) {
		return Q.base[Q.front];
	}
}

void menu() {
	printf( "1.初始化
"
			"2.插入元素
"
			"3.删除元素
"
			"4.取出队列长度
"
			"5.取出队顶元素
"
			"0.退出
"
	);
}

int main() {
	menu();
	int choose = -1 ,e ; 
	SqQueue Q1;
	while ( true ) {
		printf("请输入你的选择 : 
");
		cin >> choose;
		switch (choose){
			case 1:
				InitQueue(Q1);
				break;
			case 2:
				printf("请输入要插入的元素 : 
");
				cin >> e;
				if ( EnQueue(Q1 ,e ) ) {
					printf("插入成功
");
				} else {
					printf("插入失败,队列已满
"); 
				} break; 
			case 3:
				if ( DeQueue(Q1 ,e ) ) {
					printf("删除成功
");
				} else {
					printf("删除失败,队列以空
");
				}
				break;
			case 4:
				printf("队列长度为: %d
",QueueLenght(Q1));
				break; 
			case 5:
				if ( QueueLenght(Q1) == 0 ) {
					printf("error:队列以空
");
				} else {
					printf("队顶元素为 : %d
" ,GetHead(Q1));
				} 
				break;
			case 0: 
				break;
		}	
		if ( choose == 0 ) break;
	}
	return 0;
} 

链表实现队列

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

#define OK 1
#define ERROR 0

typedef int QElemType;
typedef struct QNode {
	QElemType data;
	struct QNode *next;
}QNode ,*QueuePtr;
typedef int Status ;

typedef struct {
	QueuePtr front;
	QueuePtr rear;
}LinkQueue;

Status InitQueue(LinkQueue &Q) {
	Q.front = Q.rear = new QNode;
	Q.front->next = NULL;
	return OK;
}

Status EnQueue (LinkQueue & Q ,QElemType e) {
	QueuePtr p;
	p = new QNode;
	p->data = e;
	p->next = NULL; Q.rear->next = p;
	Q.rear = p;
	return OK;
}

Status DeQueue(LinkQueue &Q ,QElemType e) {
	QueuePtr p;
	if ( Q.front == Q.rear ) return ERROR;
	p = Q.front->next;
	e = p->data;
	Q.front->next = p->next;
	if ( Q.rear == p ) Q.rear = Q.front;
	delete p;
	return OK;
}

QElemType GetHead(LinkQueue Q) {
	if ( Q.front != Q.rear ) {
		return Q.front->next->data;
	}
}

void menu() {
	printf(
		"1.初始化
"
		"2.插入
"
		"3.删除
"
		"4.取队列顶
"
		"0.退出
"
	);
}

int main() {
	menu(); 
	LinkQueue Q1;
	int choose ,e ;
	while ( true ) {
		printf("请输入你的选择 :");
		cin >> choose ; cout << endl; 
		switch ( choose ) {
			case 1:
				InitQueue(Q1);
				break;
			case 2:
				printf("请输入你的要插入的元素 :");
				cin >> e; cout << endl; 
				EnQueue(Q1 ,e );
				printf("插入成功
");
				break;
			case 3:
				if(DeQueue(Q1 ,e )) {
					printf("删除成功
");
				} else {
					printf("error:队列以空
");
				}
				break;
			case 4:
				printf("队列顶的元素为: %d
",GetHead(Q1));
				break;
			case 0:
				break;
		}
		if ( choose == 0 ) break;
	} 
	return 0;
}
原文地址:https://www.cnblogs.com/Nlifea/p/11745923.html