数据结构 C/C++(实验三:队列)

(大家好,今天分享的是数据结构的相关知识,大家可以在评论区进行互动答疑哦~加油!💕)

目录

提要:实验题目

一、实验目的 

二、实验内容及要求

三、算法思想 

实验1

实验2

四、源程序及注释

实验1代码(循环队列)

实验2代码(链式队列) 

五、实验结果

 实验1结果

实验2结果 


提要:实验题目

1. 循环队列的基本操作的实现    

2. 链队列的基本操作的实现      


一、实验目的 

1.深入了解队列的定义和特性。

2.掌握队列的数组表示、链表表示以及相应操作的实现,巩固对这两种结构的构造方法的掌握。

3. 会灵活运用队列结构解决某些实际问题。


二、实验内容及要求

1. 循环队列的基本操作的实现(初始化、入队、出队、求队列长度、取队头元素、判断队空、队列的遍历、清空队列、销毁队列等),要求建立菜单进行操作选择。

2. 链队列的基本操作的实现(初始化、入队、出队、求队列长度、取队头元素、判断队空、队列的遍历、清空队列、销毁队列等),要求建立菜单进行操作选择。

3. 舞伴问题(参见教材相关描述)。

注:前两个题目必做,第3题选做。


算法思想 

实验1

(1.)初始化

分配一个固定大小的数组,并设置两个指针(前指针和后指针)来标识队列的头和尾。

2.)入队

检查队列是否已满(即后指针的下一个位置等于前指针)。如果未满,将新元素放入后指针位置,并更新后指针(环形移动)。

3.)出队

检查队列是否为空(即前指针等于后指针)。如果不为空,返回前指针位置的元素,并更新前指针(环形移动)。

4.)求队列长度

通过计算后指针与前指针的差值来获取当前队列中的元素数量,考虑环形特性。

5.)取队头元素

检查队列是否为空,若不为空,返回前指针指向的元素。

6.)判断队空

直接比较前指针和后指针,如果相等,则队列为空。

7.)队列的遍历

从前指针开始,循环访问数组,直到后指针为止,收集所有元素。

8.)清空队列

重置前后指针,使其指向同一位置,从而清空队列。

9.)销毁队列

在语言支持下,释放数组空间,清理相关数据结构。

10.)舞伴问题

将参与者视为队列中的元素,通过入队和出队操作模拟舞伴选择和退出的过程,可以使用循环队列来管理参与者的动态状态。

实验2

(1.)初始化

创建一个空的链表,通常使用一个头指针(指向队列的第一个节点)和一个尾指针(指向队列的最后一个节点)。初始时,两者均为 `null`。

(2.)入队

创建一个新节点,将其数据存储在新节点中。如果队列为空(头指针为 `null`),则新节点成为头和尾;否则,将当前尾节点的 `next` 指向新节点,然后更新尾指针指向新节点。

(3.)出队

检查队列是否为空。如果不为空,保存头节点的数据,更新头指针为下一个节点(即头节点的 `next`),然后返回保存的数据。若出队后队列为空,则同时将尾指针设置为 `null`。

(4.)求队列长度

从头节点开始遍历链表,计数节点数量,直到链表结束(即指针为 `null`)。

(5.)取队头元素

检查队列是否为空,若不为空,直接返回头节点的数据。

(6.)判断队空

通过检查头指针是否为 `null` 来判断队列是否为空。

(7.)队列的遍历

从头指针开始,依次访问每个节点,直到遍历完整个链表,收集所有节点的数据。

(8.)清空队列

遍历链表,逐个删除每个节点,直至所有节点都被释放,最后将头指针和尾指针设置为 `null`。

(9.)销毁队列

在清空队列后,可以选择释放链表的头指针和尾指针的内存(如果适用),确保没有内存泄漏。

(10.)舞伴问题

将参与者视为链队列中的元素,利用链队列的动态特性来模拟舞伴的选择与退出过程,入队和出队操作分别代表参与者的加入与离开。


四、源程序及注释

实验1代码循环队列)

#include<iostream>   //输入输出流头文件 
#include<fstream>    //文件操作头文件 
#include<string>     //字符串操作头文件 
#include<iomanip>   //输入输出操纵运算头文件 
#include<stack>  // 引入 STL stack 进行栈操作
#include<cctype> // 引入字符处理函数
using namespace std;//调用命名空间std中所有标识符//预定义常量及预定义类型
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int QElemType;
typedef int Status;//Status 是函数返回值类型,其值是函数结果状态代码//表示部分:
//创建结构体
typedef struct {QElemType *base;int front;int rear;
} SqQueue;//实现部分:
//1.初始化
Status InitQueue(SqQueue &Q) {//构造一个空队列Q.base = new QElemType[MAXSIZE];if (!Q.base) {exit(OVERFLOW);}Q.front = Q.rear = 0;return OK;
}//2.循环队列入队
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;
}//3.循环队列出队
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;
}//4.求长度
Status QueueLength(SqQueue Q) {return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;}//5.求队头元素
Status GetHead(SqQueue Q, QElemType &e) {if (Q.front == Q.rear) {return ERROR;}e = Q.base[Q.front];return OK;
}//6.循环队列的判空
Status QueueEmpty(SqQueue Q) {if (Q.front == Q.rear) {return OK;} else {return ERROR;}
}//7.遍历队列
void DisplayQueue(SqQueue Q) {int i = Q.front;printf("队列元素为: ");while (Q.front != Q.rear && (i + MAXSIZE) % MAXSIZE != Q.rear) {printf("%d ", Q.base[i]);i++;
}printf("\n");}//8.清空队列
Status ClearQueue(SqQueue &Q) {Q.front = Q.rear = 0;return OK;
}//9.销毁队列
Status DestroyQueue(SqQueue &Q) {if (Q.base) {delete Q.base;}Q.base = NULL;Q.front = Q.rear = 0;return OK;
}// 10. 舞伴问题
struct Person
{char sex;// 性别:'m' 或 'f'char name[20];// 姓名
};
struct Queue
{Person person[20];int front=0;int rear=0;int count=0;
};// 匹配函数:根据性别将人员匹配
void Match(Person* person, int num, Queue *Female, Queue *Male) {// 为人员数组动态分配内存person = new Person[num];// 为男队和女队队列分配内存Female = new Queue;Male = new Queue;// 初始化队列Male->front = Male->rear = Male->count = 0;Female->front = Female->rear = Female->count = 0;// 输入人员信息cout << "请输入" << num << "位人员的性别和姓名(例如:m John):\n";for (int i = 0; i < num; i++) {cin >> person[i].sex; // 输入性别cin >> person[i].name; // 输入姓名}// 根据性别将人员加入相应的队列for (int i = 0; i < num; i++) {if (person[i].sex == 'm' || person[i].sex == 'M') {Male->person[Male->rear++] = person[i];Male->count++;}if (person[i].sex == 'f' || person[i].sex == 'F') {Female->person[Female->rear++] = person[i];Female->count++;}}// 开始匹配cout << "开始配对:\n";while (Male->count > 0 && Female->count > 0) {cout << "配对: " << Male->person[Male->front].sex << " " << Male->person[Male->front].name << "  和  "<< Female->person[Female->front].sex << " "<< Female->person[Female->front].name << endl;// 更新队列的前端索引和人数Male->front++;Female->front++;Male->count--;Female->count--;}// 检查是否还有未匹配的人员if (Male->count > 0) {cout << "下一轮等待:男队的 " << Male->person[Male->front].name << endl;}if (Female->count > 0) {cout << "下一轮等待:女队的 " << Female->person[Female->front].name << endl;}// 释放动态分配的内存delete[] person; // 释放人员数组的内存delete Male;     // 释放男队队列的内存delete Female;   // 释放女队队列的内存
}void showMenu() {cout << "****************************\n";cout << "****      1. 初始化     ****\n";cout << "****      2. 入队       ****\n";cout << "****      3. 出队       ****\n";cout << "****      4. 求队列长度 ****\n";cout << "****      5. 取队头元素 ****\n";cout << "****      6. 判断队空   ****\n";cout << "****      7. 队列的遍历 ****\n";cout << "****      8. 清空队列   ****\n";cout << "****      9. 销毁队列   ****\n";cout << "****      10. 舞伴问题  ****\n";cout << "****      0. 退出       ****\n";cout << "****************************\n";
}int main() {SqQueue Q;int e,n,num;int choose= -1;showMenu();while (choose != 0) {cout << "Please select(0-10):";cin >> choose;switch (choose) {case 1://初始化InitQueue(Q);cout << "Init successfully:\n";break;case 2: // 循环队列入队cout << "Please input the elem (int): ";cin >> e;if (EnQueue(Q, e) == OK) {cout << "入队成功" << endl;} else {cout << "入队失败" << endl;}break;case 3://循环队列出队DeQueue(Q,e);cout << "出队元素为"<<e<<endl;break;case 4: //求长度cout << "队的长度: " << QueueLength(Q) << endl;	break;case 5: //求队头元素GetHead(Q,e);cout << e;break;case 6: //循环队列的判空cout << (QueueEmpty(Q) == true ? "队空" : "不空") << endl;break;case 7: //遍历队列DisplayQueue(Q);break;case 8: //清空队列ClearQueue(Q);cout << "队已清空" << endl;break;case 9: //销毁队列DestroyQueue(Q);cout << "队已销毁" << endl;break;case 10: // 舞伴问题cout << "请输入舞伴人数: ";cin >> num;Person* person = nullptr; // 定义人员数组Queue* female = nullptr;   // 定义女队队列Queue* male = nullptr;     // 定义男队队列Match(person, num, female, male); // 调用匹配函数break;}}return 0;
}

实验2代码链式队列) 

#include<iostream>   //输入输出流头文件 
#include<fstream>    //文件操作头文件 
#include<string>     //字符串操作头文件 
#include<iomanip>   //输入输出操纵运算头文件 
#include<stack>  // 引入 STL stack 进行栈操作
#include<cctype> // 引入字符处理函数
using namespace std;//调用命名空间std中所有标识符//预定义常量及预定义类型
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define MAXSIZE 100typedef int QElemtype;
typedef int Status;//创建结构体
typedef struct QNode {QElemtype data;struct QNode *next;
} QNode, *QueuePtr;typedef struct {QueuePtr front;QueuePtr rear;
} LinkQueue;//实现部分:
//1.链队列的初始化
Status InitQueue(LinkQueue &Q) {Q.front = Q.rear = (QueuePtr) malloc(sizeof(QNode));if (!Q.front) {exit(OVERFLOW);}Q.front->next = NULL;return OK;
}//2.链队列的入队 
Status EnQueue(LinkQueue &Q, QElemtype e) {QueuePtr p = (QueuePtr) malloc(sizeof(QNode));if (!p) {exit(OVERFLOW);}p->data = e;p->next = NULL;Q.rear->next = p;Q.rear = p;return OK;
}//3.链队列的出队
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;}delete p;return OK;}//4.求队列长度
Status QueueLength(LinkQueue Q) {int i = 0;while (Q.front != Q.rear) {i++;Q.front = Q.front->next;
}return i;
}//5.取链列的对头元素 
Status GetQueueHead(LinkQueue &Q, QElemtype &e) {if (Q.front == Q.rear) {return ERROR;}e = Q.front->next->data;return OK;
}//6.判断是否为空
Status QueueEmpty(LinkQueue &Q) {if (Q.front == Q.rear) {return true;} else {return false;}
}//7.遍历队列
Status QueueTraverse(LinkQueue Q) {QNode *p;if (Q.front == Q.rear) {return ERROR;}p = Q.front->next;//存储头元素printf("从队头依次读出该队列中的元素值为: ");while (p != NULL) {printf("%d ", p->data);p = p->next;}printf("\n");return OK;
}//8.清空
Status ClearQueue(LinkQueue &Q) {Q.rear = Q.front->next;while (Q.front->next) {Q.rear = Q.rear->next;delete (Q.front->next);Q.front->next = Q.rear;}Q.rear = Q.front;return OK;
}//9.队列的销毁
Status DestoryQueue(LinkQueue &Q) {while (Q.front) {Q.rear = Q.front->next;delete (Q.front);Q.front = Q.rear;}return OK;
}// 10. 舞伴问题
struct Person
{char sex;// 性别:'m' 或 'f'char name[20];// 姓名
};
struct Queue
{Person person[20];int front=0;int rear=0;int count=0;
};// 匹配函数:根据性别将人员匹配
void Match(Person* person, int num, Queue *Female, Queue *Male) {// 为人员数组动态分配内存person = new Person[num];// 为男队和女队队列分配内存Female = new Queue;Male = new Queue;// 初始化队列Male->front = Male->rear = Male->count = 0;Female->front = Female->rear = Female->count = 0;// 输入人员信息cout << "请输入" << num << "位人员的性别和姓名(例如:m John):\n";for (int i = 0; i < num; i++) {cin >> person[i].sex; // 输入性别cin >> person[i].name; // 输入姓名}// 根据性别将人员加入相应的队列for (int i = 0; i < num; i++) {if (person[i].sex == 'm' || person[i].sex == 'M') {Male->person[Male->rear++] = person[i];Male->count++;}if (person[i].sex == 'f' || person[i].sex == 'F') {Female->person[Female->rear++] = person[i];Female->count++;}}// 开始匹配cout << "开始配对:\n";while (Male->count > 0 && Female->count > 0) {cout << "配对: " << Male->person[Male->front].sex << " " << Male->person[Male->front].name << "  和  "<< Female->person[Female->front].sex << " "<< Female->person[Female->front].name << endl;// 更新队列的前端索引和人数Male->front++;Female->front++;Male->count--;Female->count--;}// 检查是否还有未匹配的人员if (Male->count > 0) {cout << "下一轮等待:男队的 " << Male->person[Male->front].name << endl;}if (Female->count > 0) {cout << "下一轮等待:女队的 " << Female->person[Female->front].name << endl;}// 释放动态分配的内存delete[] person; // 释放人员数组的内存delete Male;     // 释放男队队列的内存delete Female;   // 释放女队队列的内存
}void showMenu() {cout << "****************************\n";cout << "****      1. 初始化     ****\n";cout << "****      2. 入队       ****\n";cout << "****      3. 出队       ****\n";cout << "****      4. 求队列长度 ****\n";cout << "****      5. 取队头元素 ****\n";cout << "****      6. 判断队空   ****\n";cout << "****      7. 队列的遍历 ****\n";cout << "****      8. 清空队列   ****\n";cout << "****      9. 销毁队列   ****\n";cout << "****      10. 舞伴问题  ****\n";cout << "****      0. 退出       ****\n";cout << "****************************\n";
}int main() {LinkQueue Q;int e,n,num;int choose= -1;showMenu();while (choose != 0) {cout << "Please select(0-10):";cin >> choose;switch (choose) {case 1://初始化InitQueue(Q);cout << "Init successfully:\n";break;case 2: // 循环队列入队cout << "Please input the elem in (int): ";cin >> e;if (EnQueue(Q, e) == OK) {cout << "入队成功" << endl;} else {cout << "入队失败" << endl;}break;case 3://循环队列出队DeQueue(Q,e);cout << "出队元素为"<<e<<endl;break;case 4: //求长度cout << "队的长度: " << QueueLength(Q) << endl;	break;case 5: //求队头元素GetQueueHead(Q,e);cout << e;break;case 6: //循环队列的判空cout << (QueueEmpty(Q) == true ? "队空" : "不空") << endl;break;case 7: //遍历队列QueueTraverse(Q);break;case 8: //清空队列ClearQueue(Q);cout << "队已清空" << endl;break;case 9: //销毁队列DestoryQueue(Q);cout << "队已销毁" << endl;break;case 10: // 舞伴问题cout << "请输入舞伴人数: ";cin >> num;Person* person = nullptr; // 定义人员数组Queue* female = nullptr;   // 定义女队队列Queue* male = nullptr;     // 定义男队队列Match(person, num, female, male); // 调用匹配函数break;}}return 0;
}

五、实验结果

 实验1结果

实验2结果 


(今日分享暂时到此为止啦!为不断努力的自己鼓鼓掌吧🥳。今日文案分享:人生本就是一场马不停蹄的相遇和告别。)     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/6042.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Chromium127编译指南 Mac篇(二)- 安装Xcode

1. 概述 在Chromium开发的道路上&#xff0c;为Mac平台搭建正确的环境是至关重要的第一步。本文将聚焦于Xcode的安装过程&#xff0c;它作为Mac上不可或缺的开发工具&#xff0c;为Chromium的编译提供了必要的编译器和工具链。 我们将详细解析如何选择、下载并安装适合Chromium…

移动应用开发 实验二:标准身高计算器

文章目录 准备工作一&#xff0c;创建Android Studio项目二&#xff0c;创建活动模块三&#xff0c;设计用户界面&#xff08;一&#xff09;设置页面布局&#xff08;二&#xff09;添加标题文本控件&#xff08;三&#xff09;设计体重输入框&#xff08;四&#xff09;设计性…

这个超级棒,我收藏的样机素材,统统分享给你们

Hello&#xff0c;大家好&#xff0c;我是后期圈&#xff01;工作不息摸鱼不止&#xff01;继续给圈友们带来有趣好玩的推荐&#xff0c;圈友们在摸鱼的同时别忘记多多点赞支持一波呀 今天给大家分享 4个超实用效率高质量网站&#xff0c;请各位偷偷收藏使用&#xff0c;懂得都…

管理 Elasticsearch 变得更容易了,非常容易!

作者&#xff1a;来自 Elastic Ken Exner Elasticsearch 用户&#xff0c;我们听到了你的心声。管理 Elasticsearch 有时会变得很复杂&#xff0c;面临的挑战包括性能调整、问题检测和资源优化。我们一直致力于简化你的体验。今天&#xff0c;我们宣布了自收购 Opster 以来的一…

spark-本地模式的配置和简单使用

python环境的安装 在虚拟机中&#xff0c;只能安装一个python的版本&#xff0c;若想要安装别的版本&#xff0c;则需要卸载之前的版本——解决方式&#xff0c;安装Anaconda 通过百度网盘分享的文件&#xff1a;Anaconda3-2021.05-Linux-x86_64.sh 链接&#xff1a;https://…

将vscode的终端改为cygwin terminal

现在终端是默认的power shell&#xff0c;没有显示cygwin 接下来选择默认配置文件 找到cygwin的选项即可 然后提示可能不安全什么的&#xff0c;点是&#xff0c;就有了

Node.js简介以及安装部署 (基础介绍 一)

Node.js简介 Node.js是运行在服务端的JavaScript。 Node.js是一个基于Chrome JavaScript运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境&#xff0c;基于Google的V8引擎&#xff0c;V8引擎执行Javascript的速度非常快&#xff0c;性能非常好。 Node.…

【MySQL 保姆级教学】深层理解索引及其特性(重点)--上(11)

MySQL与磁盘 1. MySQL与内存和磁盘的联系2. 认识磁盘2.1 MySQL与存储2.2 磁盘结构2.3 扇区2.4 定位扇区 3. MySQL与磁盘交互基本单位4. 建立共识5. 索引的理解5.1 建立一个表并查询5.2 为何 I/O 交互要是Page 6. B树 Vs B 树数6.1 不同存储引擎支持的索引结构类型6.2 B树 Vs B树…

修改云服务器远程默认端口

操作场景 由于使用系统默认端口的风险较大&#xff0c;容易被攻击软件扫描以及攻击&#xff0c;为避免因端口攻击而无法远程连接云服务器&#xff0c;您可将云服务器默认远程端口修改为不常见的端口&#xff0c;提高云服务器的安全性。 修改服务端口需在安全组规则与云服务器…

0xGame 2024 [Week 4] Jenkins

1.前言 由于好久没做web题了&#xff0c;所以今天来尝试来做一波web题&#xff0c;仅供刷题记录。 2.题目 这个给的提示对于小白来说实在是友好的过劲。 3.分析 上网搜到一个关于Jenkins的历史漏洞&#xff0c;下面链接可供参考 https://blog.csdn.net/2301_80127209/arti…

10天进阶webpack---(1)为什么要有webpack

首先就是我们的代码是运行在浏览器上的&#xff0c;但是我们开发大多都是利用node进行开发的&#xff0c;在浏览器中并没有node提供的那些环境。这就造成了运行和开发上的不同步问题。 -----引言 浏览器模块化的问题&#xff1a; 效率问题&#xff1a;精细的模块划分带来了更…

好累-还要复习

第一次碰到无极值改变区间长度特征值的关系迹对应的特征向量是原来的一列 共轭的考虑两项相加 那么就有两种情况 观察数列函数&#xff0c;构建拉格朗日&#xff08;非常重要&#xff09;

Maven从浅入深(理解篇)

前言 在软件开发领域&#xff0c;包管理器是不可或缺的工具&#xff0c;它们帮助开发者管理和维护项目中的依赖库。通过对比.NET的NuGet包、Python的pip包以及Java的Maven&#xff0c;我们可以从原理上更深刻地理解这些工具的作用和差异。 1. NuGet&#xff08;.NET&#xff0…

Ollama AI 框架缺陷可能导致 DoS、模型盗窃和中毒

近日&#xff0c;东方联盟网络安全研究人员披露了 Ollama 人工智能 (AI) 框架中的六个安全漏洞&#xff0c;恶意行为者可能会利用这些漏洞执行各种操作&#xff0c;包括拒绝服务、模型中毒和模型盗窃。 知名网络安全专家、东方联盟创始人郭盛华表示&#xff1a;“总的来说&…

【多模态读论文系列】MINIGPT-4论文笔记

【多模态读论文系列】LLaMA-Adapter V2论文笔记 【多模态读论文系列】LLaVA论文笔记 分享第三篇多模态论文阅读笔记 MINIGPT-4: ENHANCING VISION-LANGUAGE UNDERSTANDING WITH ADVANCED LARGE LANGUAGE MODELS 论文地址&#xff1a;https://arxiv.org/pdf/2304.10592 代码…

安信金控:古法金与普通金的区别

古法金和普通金在制作工艺、外观特点、硬度和耐磨性以及价格等方面存在明显差异。本文详细比较了古法金与普通金的区别&#xff0c;供大家参考。 一、制作工艺 1. 古法金 古法金采用传统的铸金工艺&#xff0c;过程复杂且耗时。主要工艺包括&#xff1a; 搂胎&#xff1a;使…

2023下半年上午(22~38)

二十二、 选A 现在定义一个函数&#xff0c;里面有非静态的局部变量f1 在栈区stack里面&#xff0c;先是主函数main入栈&#xff0c;然后调用main里面的方法&#xff0c;即function&#xff08;&#xff09;入栈&#xff0c;在入栈的一瞬间&#xff0c;局部变量f1就被定义了&a…

使用 GPT-4V 全面评估泛化情绪识别 (GER)

概述 由于情绪在人机交互中扮演着重要角色&#xff0c;因此情绪识别备受研究人员关注。目前的情感识别研究主要集中在两个方面&#xff1a;一是识别刺激物引起的情感&#xff0c;并预测观众观看这些刺激物后的感受。另一个方面是分析图像和视频中的人类情绪。在本文中&#xf…

[代码随想录打卡]Day2:209.长度最小的子数组 59.螺旋矩阵II 区间和 开发商购买土地 总结

双指针&#xff1a;快慢指针、对撞指针、滑动窗口。相关博客&#xff1a;双指针算法详解&#xff08;快慢指针、对撞指针、滑动窗口&#xff09; 209.长度最小的子数组 题目&#xff1a;给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于…

list与iterator的之间的区别,如何用斐波那契数列探索yield

问题 list与iterator的之间的区别是什么&#xff1f;如何用斐波那契数列探索yield&#xff1f; 2 方法 将数据转换成list,通过对list索引和切片操作&#xff0c;以及可以进行添加、删除和修改元素。 iterator是一种对象&#xff0c;用于遍历可迭代对象&#xff08;如列表、元组…