数据结构——队列

1、定义:插入在队尾,删除在队尾。受限的线性表

2、操作:

1) EnQueue入队

2) DeQueue出队

3、存储结构

1)循环(顺序)队列

2)链式队列

数据结构——队列_第1张图片

4、链式队列算法

// 链式队列

#include 

//结点结构体
typedef struct node {
	int data;
	struct node* next;
}QTYPE;

// 解决:谁能唯一代表这个队列的问题
typedef struct {
	QTYPE* front, * rear;
}LinkQueue;

//初始化队列
LinkQueue* lq = (LinkQueue*)malloc(sizeof(LinkQueue));	


//入队
/*1、开内存*/
int EnQueue(int x) {
	QTYPE *P = (QTYPE*)malloc(sizeof(QTYPE));	
	P->data = x;
	P->next = NULL;
	if (lq->front == NULL && lq->rear == NULL)
		lq->front = lq->rear = P;
	else {
		lq->rear->next= P;
		lq->rear = P;	//rear往后移
	}
	return 0;
}

//出队
int DeQueue() {
	QTYPE* P;
	if (lq->front == NULL && lq->rear == NULL)
		return 0;
	else {
		P = lq->front;	//让P指队列头的位置
		lq->front = lq->front->next;	//队列头向后移
		free(P);
	}
	return 1;
}

//展示队列中元素
void show() {
	QTYPE* P = lq->front;
	while (P != NULL) {
		printf("%d,", P->data);
		P = P->next;	//P指针向后移一个单位
	}
	printf("\n");
}

//界面
int menu() {
	int choose;
	int x;
	printf("请你选择操作:\n	1、入队\n	2、出队\n	3、展示\n	4、退出\n");
	scanf("%d", &choose);
	switch (choose) {
		case 1:
			printf("请你选择要输入的元素!\n");
			scanf("%d", &x);
			EnQueue(x);
			menu();
			break;
		case 2:
			DeQueue();
			menu();
			break;
		case 3:
			show();
			menu();
			break;
		case 4:
			exit(0);
			break;
		default:
			printf("输出错误,请重新操作!\n");
			menu();
			break;
	}
}

//主函数
int main() {
	lq->front = NULL;
	lq->rear = NULL;
	menu();
	return 0;
}

4、循环队列

// 循环队列

#include 

//定义结构体
#define MAX 3
typedef struct {
	int data[MAX];
	int front, rear;
}SeqQueue;

//初始化
SeqQueue* q = (SeqQueue*)malloc(sizeof(SeqQueue));
int InitSeqQueue() {
	q->front = q->rear = 0;
	return 1;
}

//入队操作
int EnQueue(int a) {
	if ((q->rear + 1) % MAX == q->front)
	{
		printf("队列已满");
		return 0;
	}		
	q->data[q->rear] = a;
	q->rear = (q->rear + 1) % MAX;
	return 1;
}

//出队操作
int DeQueue() {
	if (q->rear == q->front)
	{
		printf("队列是空队");
		return 0;
	}		
	q->front = (q->front + 1) % MAX;
	return 1;
}

//展示操作
void show() {
	int n = q->front;
	printf("队列:");
	while (n != q->rear) {
		printf("%d\t", q->data[n]);
		n = (n + 1)%MAX;
	}
}

//主菜单
void menu() {
	int choose;
	int x;
	printf("\n请选择操作:\n1、入队\n2、出队\n3、展示队中元素\n4、退出\n");
	scanf("%d", &choose);
	switch (choose) {
	case 1:
		printf("请输入入队元素\n");
		scanf("%d", &x);
		EnQueue(x);
		menu();
		break;
	case 2:
		DeQueue();
		menu();
		break;
	case 3:
		show();
		menu();
		break;
	case 4:
		exit(0);
		break;
	default:
		printf("请重新操作\n");
		menu();
		break;
	}
}

//主函数
int main() {
	InitSeqQueue();
	menu();
	return 0;
}

你可能感兴趣的:(数据结构,数据结构,算法,链表)