## @【数据结构】(链队列 基本函数)

@【数据结构】(链队列 基本函数)

链队列的基本操作函数定义:进队,出队,获取队头队尾元素

#include<stdio.h>
#include<stdlib.h>
#include <iostream>
#define Maxsize 20

using namespace std;
typedef int Elemtype;
//数据结点
typedef struct node
{		/* 定义队列结构 */
	int data;		/* 队列元素类型为int */
	struct node *next;
}QNode;
//链队结点
typedef struct qptr
{
	QNode *front;
	QNode *rear;
}LQueue;
void EnQueue(LQueue *q,Elemtype x)	/* 进队操作 */
{
	QNode *p;
	p =(QNode*)malloc(sizeof(QNode));
	p->data = x;  p->next = NULL;
	q->rear->next = p;
	q->rear = p;

}
int EmptyQue(LQueue *q)//队列是否为空
{
	if (q->front == q->rear) return 0;
	else return 1;
}
int DeQueue(LQueue *q, Elemtype *x)	/* 出队操作 1:对空 */
{
	QNode *p;
	if(!EmptyQue(q))
	{
		cout << "队空" << endl; return 0;
	}
	else
	{
		p = q->front->next;
		q->front->next = p->next;
		*x = p->data; free(p);
		if (q->front->next == NULL)
			q->rear = q->front;     //队中只有一个元素的情况下,出队后修改队尾指针
		return 1;
	}
}

void OutputQueue(LQueue *q)		/* 输出队列中元素 */
{
	QNode *p;
	p = q->front->next;
	if (!EmptyQue(q))   cout << "队空";
	while (p)
	{
		cout << p->data<< "     ";
		p = p->next;
	}
	cout << endl;
}

void  GetBack(LQueue *q)//获取对尾元素
{
	cout <<"队尾元素为:"<< q->rear->data;
	cout << endl;
}
void  GetHead(LQueue *q)//获取对头元素
{
	cout << "队头元素为:" << q->front->next->data;
	cout << endl;
}
void main()
{
	//初始化一个带头结点的链队
	LQueue *q; QNode *p;
	q = (LQueue*)malloc(sizeof(LQueue));      //申请头、尾指针结点
	p = (QNode*)malloc(sizeof(QNode));        //申请链队头结点
	p->next = NULL;
	q->front = p; q->rear = p;

	EnQueue(q, 2); EnQueue(q, 7); EnQueue(q, 4); EnQueue(q, 9);
	cout << "队中元素为:";
	OutputQueue(q);
	int index, x;
	while (1)        //永真循环
	{
		cout << "---------------------------------------------" << endl;
		cout << "请选择操作:1:进队 " << endl;
		cout << "           2:出队 " << endl;
		cout << "           3:获取队头元素 " << endl;
		cout << "           4:获取队尾元素" << endl;
		cout << "           5:列出队列中的元素" << endl;
		cout << "           0:退出 " << endl;
		cout << "---------------------------------------------" << endl;
		cin >> index;
		switch (index)
		{
		case 1:
		{
			cout << "请输入x:";
			cin >> x; EnQueue(q, x);
			cout << x << "进队后:"; OutputQueue(q);
			break;
		}
		case 2:
		{
			DeQueue(q, &x);
			cout << x << "出队后:"; OutputQueue(q);
			break;
		}
		case 3:
		{
			GetHead(q);
			break;
		}
		case 4:
		{
			GetBack(q);
			break;
		}
		case 5:
		{
			cout << "输出队中元素:" << endl;
			OutputQueue(q);
			break;
		}
		case 0: {break; exit(0); }
		}
	}
	system("pause");
}

测试示例:
进队:
在这里插入图片描述
出队一个元素:
在这里插入图片描述
获取队头元素:
在这里插入图片描述
输出队中元素:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
链接队列(Linked Queue)是一种基于链表实现的队列数据结构。下面是链接队列基本操作函数: 1. 初始化队列:初始化一个空的链接队列。 ``` void initQueue(LinkQueue *queue) { queue->front = queue->rear = (QueueNode*) malloc(sizeof(QueueNode)); if (queue->front == NULL) { printf("Memory allocation failed!\n"); exit(1); } queue->front->next = NULL; } ``` 2. 入队操作:将元素添加到队列尾部。 ``` void enQueue(LinkQueue *queue, QueueElementType data) { QueueNode *newNode = (QueueNode*) malloc(sizeof(QueueNode)); if (newNode == NULL) { printf("Memory allocation failed!\n"); exit(1); } newNode->data = data; newNode->next = NULL; queue->rear->next = newNode; queue->rear = newNode; } ``` 3. 出队操作:从队列头部删除元素并返回其值。 ``` QueueElementType deQueue(LinkQueue *queue) { if (queue->front == queue->rear) { printf("Queue is empty!\n"); exit(1); } QueueNode *p = queue->front->next; QueueElementType data = p->data; queue->front->next = p->next; if (queue->rear == p) { queue->rear = queue->front; } free(p); return data; } ``` 4. 获取队列头部元素:返回队列头部元素的值但不删除它。 ``` QueueElementType getFront(LinkQueue *queue) { if (queue->front == queue->rear) { printf("Queue is empty!\n"); exit(1); } return queue->front->next->data; } ``` 5. 判断队列是否为空:如果队列为空则返回 true,否则返回 false。 ``` bool isEmpty(LinkQueue *queue) { return queue->front == queue->rear; } ``` 6. 清空队列:将队列中的所有元素删除并释放内存。 ``` void clearQueue(LinkQueue *queue) { while (!isEmpty(queue)) { deQueue(queue); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值