(链式队列实现)PTA:7-1 有趣的队列 (20 分)

该篇博客介绍了一个有趣的队列操作问题,其中队首元素出队后立即在队尾重新入队。作者通过C语言实现了这个操作,包括创建队列、入队、出队和获取队头元素等函数,并给出了一个示例程序,演示了如何根据给定的入队和出队操作序列来更新队列状态。博客内容主要涉及数据结构和算法的应用。

7-1 有趣的队列 (20 分)
本题重新定义队列出队的操作:队首出队的数字重新在队尾入队。

例:队列中有1 2 3三个数字,现要求队首出队,则1从队首出队,同时1从队尾入队,队列变成2 3 1。

入队的顺序为1,2,3,4…n,同时给一个二进制字符串,1代表出队操作,0代表入队操作。

输入格式:
在第一行有两个数字n,m(n<=100,n<m),其中n为入队的数字个数,m代表操作数

接下来m行,每行一个数字,1或者0,代表不同的操作

输出格式:
输出操作后队列的每个数字,数字间以空格分隔,最后一个数字后没有空格

输入样例:
5 8
0
0
1
0
1
0
1
0
输出样例:
3 2 4 1 5

#include<stdbool.h>
#include<stdio.h>
#include<assert.h>
#include<malloc.h>
typedef int Data;
typedef struct _Node
{
   
   
	Data data;
	struct _Node* next;
}Node;
typedef struct _LinkQueue
{
   
   
	int size;
	Node* front;
	Node* tail;
}LinkQueue;
//创建队列
LinkQueue* createLinkQueue();
//入队
void push(LinkQueue* que, Data val);
//出队
void pop(LinkQueue* que);
//获取队头元素
Data front(LinkQueue* que);
//判空
bool empty(LinkQueue* que
出队操作队列的基本操作之一,指的是从队列的头部移除一个元素。以下介绍不同语言实现出队函数及其使用方法。 ### C语言实现实现队列时加入`size`变量辅助出队操作定义队列结构体如下: ```c #define MAX_BUF 10 typedef struct{ int data[MAX_BUF]; int front, rear; int size; } SqQueue; // 初始化空队列 void InitQueue(SqQueue *Q) { // 初始时,头,队尾指针指向0 Q->front = 0; Q->rear = 0; Q->size = 0; } // 出队函数实现 int DeQueue(SqQueue *Q) { if (Q->size == 0) { // 队列为空,可根据需求进行处理,如报错 return -1; } else { int element = Q->data[Q->front]; Q->front = (Q->front + 1) % MAX_BUF; Q->size--; return element; } } ``` 使用示: ```c #include <stdio.h> int main() { SqQueue Q; InitQueue(&Q); // 假设之前有入队操作 int dequeuedElement = DeQueue(&Q); if (dequeuedElement != -1) { printf("出队元素: %d\n", dequeuedElement); } else { printf("队列为空,无法出队\n"); } return 0; } ``` ### C语言另一种实现 通过`malloc`和`realloc`函数管理队列内存实现出队操作。 ```c #include <stdio.h> #include <stdlib.h> #define INIT_SIZE 100 #define INCREMENT 10 typedef struct { int *data; int front, rear; int capacity; } SqQueue; // 初始化队列 void InitQueue(SqQueue *Q) { Q->data = (int *)malloc(INIT_SIZE * sizeof(int)); Q->front = Q->rear = 0; Q->capacity = INIT_SIZE; } // 出队函数 int DeQueue(SqQueue *Q) { if (Q->front == Q->rear) { // 队列为空,可根据需求进行处理,如报错 return -1; } else { int element = Q->data[Q->front]; Q->front = (Q->front + 1) % Q->capacity; return element; } } ``` 使用示: ```c #include <stdio.h> int main() { SqQueue Q; InitQueue(&Q); // 假设之前有入队操作 int dequeuedElement = DeQueue(&Q); if (dequeuedElement != -1) { printf("出队元素: %d\n", dequeuedElement); } else { printf("队列为空,无法出队\n"); } return 0; } ``` ### Java实现 ```java import java.util.LinkedList; import java.util.Queue; public class QueueExample { public static void main(String[] args) { Queue<Integer> queue = new LinkedList<>(); // 入队操作 queue.add(10); queue.add(20); queue.add(30); // 出队操作 if (!queue.isEmpty()) { int dequeuedElement = queue.poll(); System.out.println("出队元素: " + dequeuedElement); } else { System.out.println("队列为空,无法出队"); } } } ``` ### Python实现 ```python from collections import deque # 创建队列 queue = deque() # 入队操作 queue.append(10) queue.append(20) queue.append(30) # 出队操作 if queue: dequeued_element = queue.popleft() print(f"出队元素: {dequeued_element}") else: print("队列为空,无法出队") ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值