数据结构实验报告-线性结构(2)

合集下载

数据结构线性表试验报告(最终定稿)

数据结构线性表试验报告(最终定稿)

数据结构线性表试验报告(最终定稿)第一篇:数据结构线性表试验报告线性表上机实习1、实验目的(1)熟悉将算法转换为程序代码的过程。

(2)了解顺序表的逻辑结构特性,熟练掌握顺序表存储结构的C 语言描述方法。

(3)熟练掌握顺序表的基本运算:查找、插入、删除等,掌握顺序表的随机存取特性。

(4)了解线性表的链式存储结构,熟练掌握线性表的链式存储结构的C语言描述方法。

(5)熟练掌握线性链表(单链表)的基本运算:查找、插入、删除等,能在实际应用中灵活选择适当的链表结构。

2、实验要求(1)熟悉顺序表的插入、删除和查找。

(2)熟悉单链表的插入、删除和查找。

3、实验内容: ① 顺序表(1)抽象数据类型定义typedef struct {TypeData data[maxsize];//容量为maxsize的静态顺手表int n;//顺序表中的实际元素个数}SeqList;//静态顺序表的定义在本次实验中,首先建立一个空的静态顺序表,然后键盘输入数据存入表中,然后进入菜单选择界面,通过不同的数字输入,实现对顺序表,删除,插入,查找,显示等操作。

(2)存储结构定义及算法思想在顺序表结构体的定义中,typedef int TypeData 为整型,存储结构如下:for(n=0;ncout<<“请输入线性表数据”<cin>>L.data[n];//顺序将数据存入顺序表}//其他存储与此类似,都是直接赋值与数组的某一位插入版块子函数:void insert(SeqList &L)//插入数据 {int a,b,c,k;cout<<“请输入插入的数及其插入的位置”<cin>>a>>b;if(b<=0||b>(L.n+1)){cout<<“不能在该位置插入”<k=L.data[b-1];L.data[b-1]=a;c=L.n;L.n=L.n+1;while(c>b){L.data[c]=L.data[c-1];c--;//通过循环,实现插入位置后的数据挨个往后移动一位}L.data[b]=k;} 顺序表的插入与删除操作类似,在插入与删除后,都要循环调整后面数组的每一位元素,同时记录数据元素的长度的标示符也要跟着改变。

《数据结构》线性结构实验报告

《数据结构》线性结构实验报告

《数据结构》线性结构实验报告2、源程序:#include <stdio.h>#include<stdlib.h>#define MAXSIZE 1024typedef int elemtype;typedef struct SequenStack{elemtype data[MAXSIZE];int top;}SequenStack;SequenStack * Init_SequenStack(){SequenStack * S;S = (SequenStack *)malloc(sizeof(SequenStack));if (S == NULL)return S;S->top = -1;return S;}int SequenStack_Empty(SequenStack * S)//判栈空{if (S->top == -1){return 1;}{int a;printf("请以十进制输入一个数:\n");scanf_s("%d", &a);printf("转化为二进制为:");Conversion(a);printf("\n");}运行结果:3、源程序:#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct node{char data;struct node* next;}LinkStack;//初始化LinkStack* Init_LinkStack(){LinkStack* top;top = (LinkStack*)malloc(sizeof(LinkStack));top->next = NULL;return top;}//入栈void Push_LinkStack(LinkStack* top, char x){LinkStack* node;node = (LinkStack*)malloc(sizeof(LinkStack));node->data = x;node->next = top->next;top->next = node;}运行结果:4、源程序:#include <stdio.h>#include<stdlib.h>#include<string.h>#define MAXSIZE 20typedef int elemtype;typedef struct QueueNode{elemtype data;struct QueueNode* next;}LinkedQueueNode;typedef struct LQueue{LinkedQueueNode* front;LinkedQueueNode* rear;}LQueue, *LinkedQueue;typedef struct Person{char name[MAXSIZE];char sex;}Person;typedef char* ElemType;//链队初始化LinkedQueue Init_LinkedQueue(){LinkedQueue Q = (LinkedQueue)malloc(sizeof(LQueue));LinkedQueueNode * head = (LinkedQueueNode *)malloc(sizeof(LinkedQueueNode));if (head != NULL && Q != NULL){head->next = NULL;Q->front = head;Q->rear = head;printf("输入参与者的姓名,性别\n");for (i = 0; i < num; i++){printf("输入第%d个舞者的名字:\n", i + 1);scanf_s("%s", &dancer[i].name, 10);printf("输入第%d个人的性别(F/M):\n", i + 1);scanf_s("%s", &dancer[i].sex, 10);while (dancer[i].sex != 'F' && dancer[i].sex != 'M'){printf("输入错误,请重新输入第%d个人的性别(F/M):\n", i + 1);scanf_s("%s", &dancer[i].sex, 10);}}DancePartner(dancer, num);break;case 0:printf("感谢你的使用!\n");break;default:printf("无此选项!\n");break;}} while (n != 0);return 0;}运行结果:。

数据结构线性表实验报告

数据结构线性表实验报告

数据结构线性表实验报告数据结构线性表实验报告1.简介本实验报告旨在介绍数据结构中线性表的实现和应用。

线性表是一种重要的数据结构,它的特点是数据元素之间存在一对一的前后关系,且具有唯一的起点和终点。

本实验通过实现线性表的基本操作,加深对线性表的理解,并通过实例应用展示线性表在实际问题中的应用。

2.实验环境本次实验采用的是编程语言C,并搭配使用一些常用的开发工具和库。

具体环境如下:________●操作系统:________Windows 10●编程语言:________C●开发工具:________Visual Studio Code●辅助库:________Stdio.h、stdlib.h、conio.h3.实验内容3.1 线性表的定义和基本操作3.1.1 线性表的定义线性表是由n(n ≥ 0)个数据元素组成的有限序列,数据元素之间存在一对一的前后关系。

3.1.2 线性表的基本操作●初始化线性表:________创建一个空的线性表。

●插入元素:________在指定位置插入一个新的元素。

●删除元素:________删除指定位置的元素。

●查找元素:________根据值或位置查找指定元素。

●修改元素:________根据位置修改指定元素的值。

●清空线性表:________将线性表中的所有元素清空。

3.2 线性表的顺序存储结构3.2.1 顺序存储结构的定义顺序存储结构是指使用一段连续的存储空间,依次存储线性表中的元素。

3.2.2 顺序存储结构的实现●初始化顺序表:________创建一个空的顺序表,并指定最大容量。

续元素依次后移。

●删除元素:________删除指定位置的元素,并将后续元素依次前移。

●查找元素:________根据值或位置查找指定元素,并返回其位置或值。

●修改元素:________根据位置修改指定元素的值。

●清空顺序表:________将顺序表中的所有元素清空。

●扩容:________当顺序表容量不足时,自动进行扩容。

数据结构实验报告2篇

数据结构实验报告2篇

数据结构实验报告数据结构实验报告精选2篇(一)实验目的:1. 熟悉数据结构的基本概念和基本操作;2. 掌握线性表、栈、队列、链表等经典数据结构的实现方法;3. 掌握数据结构在实际问题中的应用。

实验内容:本次实验主要包括以下几个部分:1. 线性表的实现方法,包括顺序表和链表,分别使用数组和链表来实现线性表的基本操作;2. 栈的实现方法,包括顺序栈和链式栈,分别使用数组和链表来实现栈的基本操作;3. 队列的实现方法,包括顺序队列和链式队列,分别使用数组和链表来实现队列的基本操作;4. 链表的实现方法,包括单链表、双链表和循环链表,分别使用指针链、双向链和循环链来实现链表的基本操作;5. 综合应用,使用各种数据结构来解决实际问题,例如使用栈来实现括号匹配、使用队列来实现马铃薯游戏等。

实验步骤及结果:1. 线性表的实现方法:a) 顺序表的基本操作:创建表、插入元素、删除元素、查找元素等;b) 链表的基本操作:插入节点、删除节点、查找节点等;c) 比较顺序表和链表的优缺点,分析适用场景。

结果:通过实验,确认了顺序表适用于频繁查找元素的情况,而链表适用于频繁插入和删除节点的情况。

2. 栈的实现方法:a) 顺序栈的基本操作:进栈、出栈、判空、判满等;b) 链式栈的基本操作:进栈、出栈、判空、判满等。

结果:通过实验,掌握了栈的基本操作,并了解了栈的特性和应用场景,例如括号匹配。

3. 队列的实现方法:a) 顺序队列的基本操作:入队、出队、判空、判满等;b) 链式队列的基本操作:入队、出队、判空、判满等。

结果:通过实验,掌握了队列的基本操作,并了解了队列的特性和应用场景,例如马铃薯游戏。

4. 链表的实现方法:a) 单链表的基本操作:插入节点、删除节点、查找节点等;b) 双链表的基本操作:插入节点、删除节点、查找节点等;c) 循环链表的基本操作:插入节点、删除节点、查找节点等。

结果:通过实验,掌握了链表的基本操作,并了解了链表的特性和应用场景。

数据结构实训实验报告

数据结构实训实验报告

一、实验背景数据结构是计算机科学中一个重要的基础学科,它研究如何有效地组织和存储数据,并实现对数据的检索、插入、删除等操作。

为了更好地理解数据结构的概念和原理,我们进行了一次数据结构实训实验,通过实际操作来加深对数据结构的认识。

二、实验目的1. 掌握常见数据结构(如线性表、栈、队列、树、图等)的定义、特点及操作方法。

2. 熟练运用数据结构解决实际问题,提高算法设计能力。

3. 培养团队合作精神,提高实验报告撰写能力。

三、实验内容本次实验主要包括以下内容:1. 线性表(1)实现线性表的顺序存储和链式存储。

(2)实现线性表的插入、删除、查找等操作。

2. 栈与队列(1)实现栈的顺序存储和链式存储。

(2)实现栈的入栈、出栈、判断栈空等操作。

(3)实现队列的顺序存储和链式存储。

(4)实现队列的入队、出队、判断队空等操作。

3. 树与图(1)实现二叉树的顺序存储和链式存储。

(2)实现二叉树的遍历、查找、插入、删除等操作。

(3)实现图的邻接矩阵和邻接表存储。

(4)实现图的深度优先遍历和广度优先遍历。

4. 算法设计与应用(1)实现冒泡排序、选择排序、插入排序等基本排序算法。

(2)实现二分查找算法。

(3)设计并实现一个简单的学生成绩管理系统。

四、实验步骤1. 熟悉实验要求,明确实验目的和内容。

2. 编写代码实现实验内容,对每个数据结构进行测试。

3. 对实验结果进行分析,总结实验过程中的问题和经验。

4. 撰写实验报告,包括实验目的、内容、步骤、结果分析等。

五、实验结果与分析1. 线性表(1)顺序存储的线性表实现简单,但插入和删除操作效率较低。

(2)链式存储的线性表插入和删除操作效率较高,但存储空间占用较大。

2. 栈与队列(1)栈和队列的顺序存储和链式存储实现简单,但顺序存储空间利用率较低。

(2)栈和队列的入栈、出队、判断空等操作实现简单,但需要考虑数据结构的边界条件。

3. 树与图(1)二叉树和图的存储结构实现复杂,但能够有效地表示和处理数据。

(完整版)数据结构线性表的应用实验报告

(完整版)数据结构线性表的应用实验报告

实验报告课程名称____数据结构上机实验__________ 实验项目______线性表的应用 ____________实验仪器________PC机___________________系别_____电子信息与通信学院___专业________ ___班级/学号______ __学生姓名______ ___________实验日期_______________________成绩_______________________指导教师_______________________实验一.线性表的应用1.实验目的:掌握线性链表的存储、运算及应用。

利用链表实现一元多项式计算。

2.实验内容:1)编写函数,实现用链表结构建立多项式;2)编写函数,实现多项式的加法运算;3)编写函数,实现多项式的显示;4)测试:编写主函数,它定义并建立两个多项式,显示两个多项式,然后将它们相加并显示结果。

变换测试用的多项式,检查程序的执行结果。

选做内容:修改程序,选择实现以下功能:5)多项式求值:编写一个函数,根据给定的x值计算并返回多项式f(x)的值。

测试该函数(从终端输入一个x的值,调用该函数并显示返回结果)。

6)多项式相减:编写一个函数,求两个多项式相减的多项式。

7)多项式相乘:编写一个函数,求两个多项式的乘积多项式。

3.算法说明:1)多项式的建立、显示和相加算法见讲义。

可修改显示函数,使输出的多项式更符合表达规范。

2)多项式减法:同次项的系数相减(缺项的系数是0)。

例如a(x)=-5x2+2x+3,b(x)= -4x3+3x,则a(x)-b(x)=4x3-5x2-x+3。

提示:a(x)-b(x) = a(x)+(-b(x))。

3)多项式乘法:两个多项式的相乘是“系数相乘,指数相加”。

算法思想是用一个多项式中的各项分别与另一个多项式相乘,形成多个多项式,再将它们累加在一起。

例如,a(x)=-5x2+2x+3,b(x)=-4x3+3x,则a(x)*b(x) = (-4x3)*(-5x2+2x+3)+(3x)*(-5x2+2x+3)= (20x5-8x4-12x3) + (-15x3+6x2+9x) =20x5-8x4-27x3+6x2+9x。

数据结构线性表实验报告

数据结构线性表实验报告

数据结构线性表实验报告数据结构线性表实验报告引言:数据结构是计算机科学中的一个重要概念,它研究如何组织和存储数据,以便能够高效地访问和操作。

线性表是数据结构中最基本的一种,它是一种有序的数据元素集合,其中的元素之间存在一对一的关系。

本次实验旨在通过实际操作线性表,加深对数据结构的理解,并掌握基本的线性表操作。

实验目的:1. 理解线性表的概念和特点;2. 掌握线性表的基本操作,如插入、删除、查找等;3. 熟悉线性表的顺序存储结构和链式存储结构;4. 分析不同存储结构的优缺点。

实验内容:1. 实现线性表的顺序存储结构顺序存储结构是将线性表的元素按照其逻辑顺序依次存放在一块连续的存储空间中。

我们可以使用数组来实现顺序存储结构。

首先,定义一个固定大小的数组作为线性表的存储空间,然后通过数组的下标来访问和操作线性表中的元素。

在插入和删除元素时,需要移动其他元素的位置,以保持线性表的有序性。

2. 实现线性表的链式存储结构链式存储结构是将线性表的元素存储在一系列的结点中,每个结点包含一个数据元素和一个指向下一个结点的指针。

通过将各个结点用指针连接起来,形成一个链表。

在插入和删除元素时,只需要修改相邻结点之间的指针,而不需要移动其他元素的位置。

实验步骤:1. 实现顺序存储结构的线性表首先,定义一个固定大小的数组,用于存储线性表的元素。

然后,实现插入、删除、查找等基本操作。

在插入元素时,需要判断线性表是否已满,如果已满则需要扩容。

在删除元素时,需要判断线性表是否为空,如果为空则无法删除元素。

通过实现这些基本操作,可以对线性表进行增删查改等操作。

2. 实现链式存储结构的线性表首先,定义一个结点类,包含一个数据元素和一个指向下一个结点的指针。

然后,通过将各个结点用指针连接起来,形成一个链表。

实现插入、删除、查找等基本操作。

在插入元素时,需要找到插入位置,并修改相邻结点之间的指针。

在删除元素时,需要找到待删除元素的前一个结点,并修改前一个结点的指针。

数据结构课程实验报告

数据结构课程实验报告

数据结构课程实验报告一、实验目的本次数据结构课程实验的主要目的是通过实践掌握常见数据结构的基本操作,包括线性结构、树形结构和图形结构。

同时,也要求学生能够熟练运用C++语言编写程序,并且能够正确地使用各种算法和数据结构解决具体问题。

二、实验内容本次实验涉及到以下几个方面:1. 线性表:设计一个线性表类,并且实现线性表中元素的插入、删除、查找等基本操作。

2. 栈和队列:设计一个栈类和队列类,并且分别利用这两种数据结构解决具体问题。

3. 二叉树:设计一个二叉树类,并且实现二叉树的遍历(前序遍历、中序遍历和后序遍历)。

4. 图论:设计一个图类,并且利用图论算法解决具体问题(如最短路径问题)。

三、实验过程1. 线性表首先,我们需要设计一个线性表类。

在这个类中,我们需要定义一些成员变量(如线性表大小、元素类型等),并且定义一些成员函数(如插入元素函数、删除元素函数等)。

在编写代码时,我们需要注意一些细节问题,如边界条件、异常处理等。

2. 栈和队列接下来,我们需要设计一个栈类和队列类。

在这两个类中,我们需要定义一些成员变量(如栈顶指针、队头指针等),并且定义一些成员函数(如入栈函数、出栈函数、入队函数、出队函数等)。

在编写代码时,我们需要注意一些细节问题,如空间不足的情况、空栈或空队列的情况等。

3. 二叉树然后,我们需要设计一个二叉树类,并且实现二叉树的遍历。

在这个类中,我们需要定义一个节点结构体,并且定义一些成员变量(如根节点指针、节点数量等),并且定义一些成员函数(如插入节点函数、删除节点函数、遍历函数等)。

在编写代码时,我们需要注意一些细节问题,如递归调用的情况、空节点的情况等。

4. 图论最后,我们需要设计一个图类,并且利用图论算法解决具体问题。

在这个类中,我们需要定义一个邻接矩阵或邻接表来表示图形结构,并且定义一些成员变量(如顶点数量、边的数量等),并且定义一些成员函数(如添加边函数、删除边函数、最短路径算法等)。

数据结构实验报告模板

数据结构实验报告模板

实验报告:数据结构
一、实验目的
本次实验的目的是熟悉数据结构的基本概念和实现,掌握数据结构的结构及操作,并能够熟练使用数据结构实现算法。

二、实验内容
本次实验的内容包括:数据结构的基本概念、数据结构的结构和操作、数据结构的实现和应用。

1、数据结构的基本概念
数据结构是指存储和组织数据的结构,是指以某种特定的方式来组织和存储数据,以便于有效地访问和操作数据。

数据结构可以分为两大类:线性结构和非线性结构。

线性结构是指数据元素之间存在一对一的线性关系,如数组、链表、栈和队列等;而非线性结构是指数据元素之间存在多对多的关系,如树、图等。

2、数据结构的结构和操作
数据结构的结构指的是数据元素之间的关系,是指数据元素之间的逻辑结构,比如数组的结构就是元素之间的线性关系,而树的结构则是元素之间的多对多关系。

数据结构的操作指的是操作数据元素的过程,比如插入、删除、查找等。

3、数据结构的实现和应用
数据结构的实现指的是用代码实现数据结构的过程,比如用C语言实现链表的过程,用Java实现树的过程等。

数据结构的应用指的是利用数据结构解决实际问题的过程,比如用栈实现括号匹配、用队列实现模拟银行等。

三、实验结果
通过本次实验,我对数据结构的基本概念、结构和操作、实现和应用有了更深入的了解,并能够熟练使用数据结构实现算法。

四、总结
本次实验主要介绍了数据结构的基本概念、结构和操作、实现和应用,经过本次实验,我对数据结构有了更深入的了解,并能够熟练使用数据结构实现算法。

线性结构实训报告范文

线性结构实训报告范文

一、实训目的本次线性结构实训旨在让学生掌握线性结构的基本概念、基本操作和常用算法,提高学生的程序设计能力和算法思维能力。

通过实训,使学生能够熟练运用线性结构解决实际问题,为后续课程学习打下坚实基础。

二、实训内容1. 线性结构的概念及特点(1)线性结构:数据元素之间存在一对一的线性关系的数据结构。

(2)线性结构的特点:① 有且只有一个根节点;② 每个节点最多有一个前件和一个后件;③ 有且只有一个终端节点。

2. 常用线性结构(1)线性表:由有限个数据元素组成,每个数据元素都有一个直接前件和一个直接后件。

(2)栈:一种特殊的线性表,其插入和删除操作只在一端进行。

(3)队列:一种特殊的线性表,其插入和删除操作分别在两端进行。

3. 线性结构的基本操作(1)初始化:创建一个空的线性结构。

(2)插入:在指定位置插入一个新元素。

(3)删除:删除指定位置的元素。

(4)查找:查找线性结构中指定元素的位置。

(5)遍历:访问线性结构中的所有元素。

4. 线性结构常用算法(1)顺序查找:从线性结构的首元素开始,依次与要查找的元素进行比较,直到找到或遍历完整个线性结构。

(2)二分查找:要求线性结构是有序的,通过比较中间元素与要查找的元素的大小关系,确定查找的范围,直到找到或查找失败。

三、实训过程1. 理论学习:通过阅读教材和查阅资料,了解线性结构的基本概念、基本操作和常用算法。

2. 编程实践:根据实训内容,选择合适的编程语言(如C、C++、Java等)实现线性结构的基本操作和常用算法。

3. 调试与优化:对编写的程序进行调试,确保程序正确运行。

在保证程序功能的基础上,对程序进行优化,提高程序性能。

4. 上机报告:整理实训过程,撰写实训报告。

四、实训成果1. 掌握线性结构的基本概念、基本操作和常用算法。

2. 能够运用线性结构解决实际问题。

3. 提高程序设计能力和算法思维能力。

4. 完成实训报告,总结实训过程。

五、实训心得1. 理论与实践相结合:通过本次实训,深刻体会到理论知识的重要性,同时也认识到实践操作对提高编程能力的重要性。

线性结构应用实验报告(3篇)

线性结构应用实验报告(3篇)

第1篇一、实验目的1. 掌握线性结构的基本概念和特点;2. 熟悉线性结构的应用场景;3. 掌握线性结构在数据存储和处理中的优势;4. 能够运用线性结构解决实际问题。

二、实验内容本次实验主要针对线性结构进行应用,通过实现一个简单的学生信息管理系统,演示线性结构在实际问题中的应用。

三、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发工具:Visual Studio 2019四、实验原理线性结构是一种基本的数据结构,它具有以下特点:1. 有且仅有一个根节点;2. 每个节点最多有一个前件节点和一个后件节点;3. 线性结构中的节点是有序的。

线性结构在数据存储和处理中具有以下优势:1. 便于实现插入和删除操作;2. 线性查找效率较高;3. 便于实现排序和遍历等操作。

五、实验步骤1. 定义学生信息结构体;2. 实现学生信息链表的创建、插入、删除、查找、排序和遍历等操作;3. 实现学生信息管理系统功能;4. 编写主函数,测试实验功能。

六、实验代码1. 学生信息结构体定义:```cppstruct Student {int id; // 学号string name; // 姓名int age; // 年龄float score; // 成绩Student next; // 指向下一个节点的指针};```2. 学生信息链表创建:```cppStudent createStudentList() {Student head = nullptr; // 创建头节点Student tail = nullptr; // 创建尾节点// 创建学生信息Student newStudent = new Student;newStudent->id = 1;newStudent->name = "张三";newStudent->score = 90.0;head = newStudent;tail = newStudent;// 创建更多学生信息newStudent = new Student;newStudent->id = 2;newStudent->name = "李四";newStudent->age = 21;newStudent->score = 85.0;tail->next = newStudent;tail = newStudent;// 返回链表头节点return head;}```3. 学生信息链表插入:```cppvoid insertStudent(Student head, Student newStudent) { if (head == nullptr) {head = newStudent;return;}while (current->next != nullptr) {current = current->next;}current->next = newStudent;}```4. 学生信息链表删除:```cppvoid deleteStudent(Student head, int id) {if (head == nullptr) {return;}Student current = head;Student prev = nullptr;while (current != nullptr && current->id != id) { prev = current;current = current->next;}if (current == nullptr) {return;}if (prev == nullptr) {head = current->next;} else {prev->next = current->next;}delete current;}```5. 学生信息链表查找:```cppStudent findStudent(Student head, int id) {Student current = head;while (current != nullptr && current->id != id) { current = current->next;}return current;}```6. 学生信息链表排序:```cppvoid sortStudentList(Student head) {if (head == nullptr || head->next == nullptr) { return;}Student sorted = nullptr;Student current = head;while (current != nullptr) {Student next = current->next;Student temp = sorted;while (temp != nullptr && temp->score >= current->score) { temp = temp->next;}current->next = temp;if (temp == nullptr) {sorted = current;} else {temp->next = current;}current = next;}head = sorted;}```7. 学生信息链表遍历:```cppvoid traverseStudentList(Student head) {Student current = head;while (current != nullptr) {cout << "学号:" << current->id << " 姓名:" << current->name << " 年龄:" << current->age << " 成绩:" << current->score << endl;current = current->next;}}```8. 学生信息管理系统功能实现:```cppvoid studentManagementSystem() {Student head = createStudentList();int choice;do {cout << "1. 添加学生信息" << endl;cout << "2. 删除学生信息" << endl;cout << "3. 查找学生信息" << endl;cout << "4. 显示所有学生信息" << endl;cout << "5. 退出" << endl;cout << "请选择操作:";cin >> choice;switch (choice) {case 1:// 添加学生信息break;case 2:// 删除学生信息break;case 3:// 查找学生信息break;case 4:// 显示所有学生信息traverseStudentList(head);break;case 5:// 退出break;default:cout << "无效操作,请重新选择!" << endl; }} while (choice != 5);}```9. 主函数:```cppint main() {studentManagementSystem();return 0;}```七、实验结果与分析通过本次实验,我们成功实现了学生信息管理系统,演示了线性结构在实际问题中的应用。

国家开放大学《数据结构》课程实验报告(实验2——线性表)参考答案

国家开放大学《数据结构》课程实验报告(实验2——线性表)参考答案
printf("\n");
//在链表中删除最高分和最低分结点
for(q=head,p=head->next;p!=NULL;q=p,p=p->next)
{
if(p==pmin) { q->next=p->next; p=q; } //删除最低分结点
};
typedef struct pw PW;
//定义链表结点
struct node
{
PW data;
struct node * next;
};
typedef struct node NODE;
NODE *create(int n); //建立单链表
void input(NODE *s,int i); //输入第i个评委信息
(5)遍历链表,累加求和,计算总分及平均分,并输出相关信息。
完整程序
//实验1.1线性表的链接存储结构
#include
#include
#include
#define PWRS 5 //定义评委人数
//定义评委信息
struct pw
{
char name[8]; //姓名
short age; //年龄
float score; //评分
NODE *create(int n)
{
NODE *head,*p,*q;
inti;
p=(NODE*)malloc(sizeof(NODE));
head=p; q=p; p->next=NULL;
for(i=1; i<=n; i++)
{
p=(NODE*)malloc(sizeof(NODE));

数据结构线性表操作实验报告

数据结构线性表操作实验报告

《数据结构》实验报告实验题目:线性表的操作实验目的:1.掌握上机调试线性表的基本方法;2.掌握线性表的一些基本操作;实验内容:将两个有序链表合并为一个有序链表一、需求分析1.实验程序中先创建两个有序链表,演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入两个链表中的相应数据。

2.将两个链表合并时可按数据从大到小或从小到大合并,用户根据提示可选择一种排序方式。

3.程序执行命令包括:(1)构造链表;(2)输入数据;(3)合并两个链表,根据用户需求选择一种排序方式;(4)将合并结果输出;(5)结束4.测试数据:链表1数据为:2,4,6,7,10链表2数据为:1,3,5,6,7,12按从小到达合并为:1,2,3,4,5,6,6,7,7,10,12;按从大到小合并为:12,10,7,7,6,6,5,4,3,2,1;二、概要设计1.基本操作Linklist creat ()操作结果:构造一个链表,并输入数据,返回头节点指针。

void print(Linklist head)初始条件:链表已存在;操作结果:将链表输出。

void MergeList_1(Linklist La,Linklist Lb)初始条件:有序线性链表La 和Lb 已存在;操作结果:将La 和Lb 两个链表按从小到大的顺序合并。

void MergeList_2(Linklist La,Linklist Lb)初始条件:有序线性链表La 和Lb 已存在;操作结果:将La 和Lb 两个链表按从大到小的顺序合并。

2.本程序包括四个模块:(1)主程序模块;(2)链表数据输入模块;(3)链表合并模块;(4)链表输出模块;三、详细设计1.元素类型,节点类型,指针类型主程序模块 数据输入 按从小到大合并两链表 按从大到小合并两链表 将新链表输出 将新链表输出typedef struct LNode //定义节点{int data;struct LNode *next;}LNode,* Linklist;2.每个模块的分析(1)主函数模块int main(){Linklist head1,head2;int i;printf("请输入链表1数据(由小到大,输入0表示输入结束):\n");head1=creat(); //创建链表1,将头结点指针返回为head1printf("请输入链表2数据(由小到大,输入0表示输入结束):\n");head2=creat();printf("请选择排序方式(输入1则从小到达合并,输入其它整数则按从大到小合并):");scanf("%d",&i); //创建链表2,将头结点指针返回为head2if(i==1) //选择两种排序方式,如果输入1,则合并后按从小到大输出;输入其它数,合成链表按从大到小输出{printf("按小到大将两表合并得:\n");MergeList1(head1,head2); //将创建好的两表的头结点地址head1,head2作为函数参数}else{ printf("按从大到小将两表合并得:\n");MergeList2(head1,head2); //将创建好的两表的头结点地址head1,head2作为函数参数}return 0;}(2)数据输入创建链表模块Linklist creat() //创建链表函数,并将创建链表的头结点指针返回{Linklist head,p,s;int z=1,x;head=(LNode *) malloc(sizeof(LNode));p=head;while(z){scanf("%d",&x);if(x!=0) //输入0表示链表数据输入结束{s=(LNode *)malloc(sizeof(LNode));s->data=x;p->next=s;s->next=NULL;p=s;}elsez=0;}return(head);}(3)合并链表模块,两个函数分别表示两种排序方式,将链表合并后直接在函数中调用链表输出函数void print(Linklist head)将链表输出void MergeList_1(Linklist La,Linklist Lb)//已知链表La和Lb元素都按从小到大排列,将La和Lb合并成新链表,其中元素也按从小到大排列{Linklist pa,pb,pc,Lc;pa = La->next; pb = Lb->next;Lc = pc = La; //把La的头节点作为新建链表Lc的头结点while (pa && pb){if (pa->data <= pb->data){pc->next = pa;pc = pa;pa = pa->next;}else{pc->next = pb;pc = pb;pb = pb->next;}}pc->next = pa ? pa : pb; //插入剩余段print(Lc); //将链表Lc输出}void MergeList_2(Linklist La,Linklist Lb)//已知链表La和Lb的元素都按从小到大排列,合并La和Lb得到新链表,其中元素按照从大到小的顺序排列{Linklist pa,qa,pb,qb,Lc; //设指针qa,qb,分别作为pa,pb的前驱的指针pa=La->next;pb=Lb->next;Lc=La;Lc->next=NULL;while(pa&&pb){if(pa->data<=pb->data){qa=pa;pa=pa->next;qa->next=Lc->next;Lc->next=qa;}else{qb=pb;pb=pb->next;qb->next=Lc->next;Lc->next=qb;}}while(pa) //如果pa不为空,则将La链的剩余段倒叙插入到头节点的后面{qa=pa;pa=pa->next;qa->next=Lc->next;Lc->next=qa;}while(pb) //如果pb不为空,则将Lb链的剩余段倒叙插入到头结点的后面{qb=pb;pb=pb->next;qb->next=Lc->next;Lc->next=qb;}print(Lc); //将新合成的链表Lc输出}(4)链表输出模块,实现最终链表的输出void print(Linklist head) //链表输出函数,将链表输出{LNode *p;p=head->next;if(head!=NULL)do{printf("%d ",p->data);p=p->next;} while (p);printf("\n");四、程序使用说明及测试结果1.程序使用说明(1)本程序的运行环境为VC6.0;(2)进入演示程序后显示提示信息:请输入链表1数据(由小到大,输入0表示输入结束):按要求输入数据请输入链表2数据(由小到大,输入0表示输入结束):按要求输入数据请选择排序方式(输入1则从小到达合并,输入其它整数则按从大到小合并):输入数据选择合并方式2.测试结果对链表1输入数据2,4,6,7,10,0对链表2输入数据1,3,5,6,7,12,0输入数据选择排序方式:如果输入:1 输出结果为:1,2,3,4,5,6,6,7,7,10,12如果输入:3(整数非1)输出结果为:12,10,7,7,6,6,5,4,3,2,13.调试中遇到的错误分析第一次运行时有问题,看以看出它的排序方式是对的,但是输出是多出前面一个很大的数,可能是输出函数void print(Linklist head)有问题,检查程序:此处逻辑出错,直接将p指针指向head,然后就将p->data输出,因此第一个数是头指针head所对应节点的值,所以可将p=head;改为p=head->next;这样p就指向第一个节点。

数据结构线性表实验报告五篇

数据结构线性表实验报告五篇

数据结构线性表实验报告五篇第一篇:数据结构线性表实验报告实验报告课程名:数据结构实验名:线性表及其操作姓名:班级:学号:撰写时间:2014.09.24一实验目的与要求1.掌握线性表的实现2.掌握线性表的基本操作的实现二实验内容• 分别完成线性表的顺序表示及链式表示• 在两种表示上, 分别实现一些线性表的操作, 至少应该包括–在第i个位置插入一个元素–删除第i个元素–返回线性表长–返回第i个元素的值三实验结果与分析#include #include //---------线性表链式表示-----------struct V//声明一个结构体类型struct V { int value;struct V * next;//定义结构体变量};void PrintLink(struct V*p)//定义一个结构体指针{ while(p!=NULL)//只要指针指向的变量不为NULL;就会一直循环链表指向下一个结构体{printf(“%d, ”,(*p).value);p=(*p).next;//指针指向下一个结构体} printf(“n”);} void Link(){struct V*head;head=(struct V*)malloc(sizeof(struct V));//开辟一个长度为size的内存(*head).value=-100;//表头为-100(*head).next=NULL;printf(“------------线性表链式表示------------n”);int i,n=10;struct V*p=head;printf(“10个数据:n”);for(i=0;i(*p).next=(struct V*)malloc(sizeof(struct V));p=(*p).next;(*p).value=2*i;(*p).next=NULL;} PrintLink(head);//调用PrintLink函数printf(“删除第四个数据:n”);int k=4;p=head;for(i=1;ip=(*p).next;} struct V*temp=(*p).next;//k表示插入和删除的位置(*p).next=(*temp).next;free(temp);PrintLink(head);printf(“插入第十个数据:n”);k=10;p=head;for(i=1;ip=(*p).next;} temp=(*p).next;(*p).next=(struct V*)malloc(sizeof(struct V));(*(*p).next).value=-99;(*(*p).next).next=temp;PrintLink(head);}//---------线性表顺序表示-----------void seq1(){ int i,n=10,k=4;int a[10];//---------输出数组元素------------printf(“-------------线性表顺序表示---------n”);for(i=0;ia[i]=i;} printf(“数组元素为:n”);for(i=0;iprintf(“%3d”,a[i]);} printf(“n”);//--------插入一个数组元素---------int m=n+1,j=12;//插入元素12 int b[20];for(i=0;i if(i{b[i]=a[i];}else if(i==k){b[i]=j;}else{b[i]=a[i-1];} } printf(“输出插入一个元素的数组:n”);for(i=0;i{if(i{c[i]=a[i];}else{c[i]=a[i+1];} } printf(“输出删除一个元素的数组:n”);for(i=0;i printf(“数组元素为:n”);for(i=1;i<=a[0];i++){a[i]=i;} for(i=0;i<2*a[0];i++){printf(“%d,”,a[i]);} printf(“n”);//-----在k 位置插入一个元素------------for(i=a[0];i>=k;i--){a[i+1]=a[i];} a[k]=-100;++a[0];for(i=0;i<2*a[0];i++){printf(“%d,”,a[i]);} printf(“n”);//-------在k---------------for(i=0;i>k;i++){a[i]=a[i+1];} a[k]=-1;a[0]=n;--a[0];for(i=0;i<2*a[0];i++){printf(“%d,”,a[i]);} printf(“n”);} int main(int argc,char *argv[]){ seq1();seq2();Link();return 0;} 图1:实验结果截图实验分析:已在程序中按规定格式标注。

线性及其应用实验报告(3篇)

线性及其应用实验报告(3篇)

第1篇一、实验目的1. 理解线性结构的基本概念和特点。

2. 掌握线性结构的应用场景和实际操作。

3. 学习线性结构在计算机科学中的重要性。

4. 提高编程能力,通过实践加深对线性结构理解。

二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发环境:Visual Studio 2019三、实验内容1. 线性结构的基本概念2. 线性结构的应用场景3. 线性结构的基本操作4. 线性结构在实际项目中的应用四、实验步骤1. 线性结构的基本概念(1)定义:线性结构是一种数据结构,其中的元素按照一定的顺序排列,每个元素都有一个前驱和一个后继(或前驱和后继都为空)。

(2)特点:线性结构具有以下特点:a. 有且只有一个根节点;b. 每个节点有且只有一个前驱和一个后继;c. 除根节点外,其他节点都有且只有一个前驱和一个后继。

2. 线性结构的应用场景(1)栈:用于处理先入后出(FILO)的场景,如函数调用、表达式求值等。

(2)队列:用于处理先入先出(FIFO)的场景,如打印任务、任务调度等。

(3)链表:用于处理动态数据,如动态数组、动态内存管理等。

(4)双向链表:在链表的基础上增加前驱指针,方便前后遍历。

(5)循环链表:在链表的基础上增加尾节点指向头节点,形成环状结构。

3. 线性结构的基本操作(1)插入操作:在链表的指定位置插入一个新节点。

(2)删除操作:删除链表中的指定节点。

(3)查找操作:查找链表中的指定节点。

(4)遍历操作:遍历链表中的所有节点。

4. 线性结构在实际项目中的应用(1)文件系统:文件系统中,文件内容以线性结构存储,方便读写操作。

(2)数据库:数据库中,数据以线性结构存储,如行和列。

(3)操作系统:操作系统中的进程管理、内存管理等功能都涉及到线性结构。

(4)编译器:编译器中的语法分析、语义分析等功能也涉及到线性结构。

五、实验结果与分析1. 实验结果(1)成功实现线性结构的基本操作,如插入、删除、查找、遍历等。

数据结构实验报告1-线性结构

数据结构实验报告1-线性结构
(2)在顺序表的第i(0≤i≤n)个元素之前插入一个值为x的元素,并输出插入后的顺序表中各元素的值。
(3)删除顺序表中第i(0≤i≤n-1)个元素,并输出删除之后的顺序表中各元素的值。
(4)在顺序表中查找值为x的元素初次出现的位置。如果查找成功,则返回该元素在顺序表中的位序号;如果查找失败,则提示顺序表中不包含此元素。
广东金融学院实验报告
课程名称:数据结构
实验编号
及实验名称
实验一:线性结构实验
系 别
计算机科学与技术系
姓 名
学 号
班 级
实验地点
新电405
实验日期
2016.9.22-2016.11.16
实验时数
8
指导教师
刘秋莲
同组其他成员
成 绩

一、实验目的及要求
充分理解线性表的顺序存储方式和链式存储方式,掌握顺序表和单链表的各种基本运算的实现。
(5)删除顺序表中相同的元素。
(二)编写一个程序,实现单链表的各种基本运算,并在此基础上设计一个主程序,完成如下功能:
(1)根据输入指定个数的表元素值,采用头插法建立一个单链表,并输出单链表中各元素的值,同时观察输入内容与输出内容是否一致。
(2)在单链表的第i个元素之前插入一个值为x的新元素,并输出插入后的单链表中各元素的值。
充分理解循环单链表和栈的工作原理,并实现简单应用。
二、实验环境及相关情况(包含使用软件、实验设备、主实验内容及步骤(包含简要的实验步骤流程)
(一)编写一个程序,实现顺序表的各种基本运算,并在此基础上设计一个测试程序,完成如下功能:
(1)根据输入顺序表的长度n和表中各元素的值,建立一个顺序表,并输出顺序表中各元素的值。

数据结构线性表实验报告

数据结构线性表实验报告

一、实验目的和要求(1)理解线性表的逻辑结构特性。

(2)深入掌握线性表的两种存储方法,即顺序表和链表。

体会这两种存储结构之间的差异。

(3)重点掌握顺序表和链表上各种基本运算的实现。

(4)综合运用线性表解决一些复杂的实际问题。

二、实验内容实验2.1 编写一个程序algo2-1.cpp,实现顺序表的各种基本运算(假设顺序表的元素类型为char),并在此基础上设计一个程序exp2-1.cpp,完成如下功能:(1)初始化顺序表L;(2)采用尾插法依次插入元素a,b,c,d,e;(3)输出顺序表L;(4)输出顺序表L长度;(5)判断顺序表L是否为空;(6)输出顺序表L的第三个元素;(7)输出元素a的位置;(8)在第4个元素位置上插入元素f;(9)输出顺序表L;(10)删除L的第3个元素;(11)输出顺序表L;(12)释放顺序表L。

实验2.2 编写一个程序algo2-2.cpp,实现单链表的各种基本运算(假设单链表的元素类型为char),并在此基础上设计一个程序exp2-2.cpp,完成如下功能:(1)初始化单链表h;(2)采用尾插法依次插入元素a,b,c,d,e;(3)输出单链表h;(4)输出单链表h长度;(5)判断单链表h是否为空;(6)输出单链表h的第三个元素;(7)输出元素a的位置;(8)在第4个元素位置上插入元素f;(9)输出单链表h;(10)删除L的第3个元素;(11)输出单链表h;、(12)释放单链表h。

释放顺序表L。

实验2.3 编写一个程序algo2-3.cpp,实现双链表的各种基本运算(假设双链表的元素类型为char),并在此基础上设计一个程序exp2-3.cpp,完成如下功能:(1)初始化双链表h;(2)采用尾插法依次插入元素a,b,c,d,e;(3)输出双链表h;(4)输出双链表h长度;(5)判断双链表h是否为空;(6)输出双链表h的第三个元素;(7)输出元素a的位置;(8)在第4个元素位置上插入元素f;(9)输出双链表h;(10)删除L的第3个元素;(11)输出双链表h;、(12)释放双链表h。

线性结构实训报告范文(3篇)

线性结构实训报告范文(3篇)

第1篇一、实训目的本次实训旨在通过学习线性结构的基本概念、性质、操作和应用,提高学生对线性结构理论知识的掌握程度,培养学生运用线性结构解决实际问题的能力。

通过本次实训,使学生能够:1. 理解线性结构的基本概念和性质;2. 掌握线性结构的基本操作,如插入、删除、查找等;3. 能够运用线性结构解决实际问题;4. 提高编程能力和逻辑思维能力。

二、实训内容1. 线性结构的基本概念线性结构是一种数据结构,它具有以下特点:(1)有且只有一个根节点;(2)每个节点最多有一个前驱节点和一个后继节点;(3)线性结构中的节点之间具有一对一的线性关系。

2. 线性结构的基本操作线性结构的基本操作包括:(1)创建线性结构;(2)插入节点;(3)删除节点;(4)查找节点;(5)遍历线性结构。

3. 线性结构的应用线性结构在实际生活中有着广泛的应用,如:(1)线性表:存储一组有序的数据元素,如学生信息表、成绩表等;(2)栈:用于存储一系列的操作步骤,如函数调用栈、递归函数调用栈等;(3)队列:用于存储一系列等待处理的任务,如打印队列、网络请求队列等;(4)链表:用于存储一系列无序的数据元素,如电话号码簿、好友列表等。

三、实训过程1. 理论学习首先,我们学习了线性结构的基本概念、性质和操作。

通过阅读教材、查阅资料,了解了线性结构的基本原理和应用场景。

2. 编程实现在掌握了线性结构的基本操作后,我们开始编写程序实现线性结构。

以线性表为例,我们使用C语言实现了线性表的创建、插入、删除、查找和遍历等操作。

3. 代码调试与优化在编程过程中,我们遇到了一些问题,如插入和删除操作时数据元素的移动、查找操作的时间复杂度等。

通过查阅资料、请教同学和老师,我们解决了这些问题,并对代码进行了优化。

4. 项目实践为了验证线性结构在实际应用中的效果,我们设计了一个项目:学生信息管理系统。

该系统使用线性表存储学生信息,实现了学生信息的添加、删除、修改和查询等功能。

线性结构基本算法的实现-数据结构实验报告

线性结构基本算法的实现-数据结构实验报告
return OVERFLOW;
S->top = S->base;
S->stacksize = 20;
return OK;
}
int Push (SqStack *S,ElБайду номын сангаасmType e)
{
if (S->top - S->base >= S->stacksize)
{
S->base = (ElemType *)realloc(S->base,(20+10) * sizeof(ElemType));
#include<malloc.h>
#include"LinkList.h"
void main ()
{
LinkList La,Lb,Lc;
int n1,n2;
La = (LinkList)malloc(sizeof(LNode));
La->next = NULL;
Lb = (LinkList)malloc(sizeof(LNode));
CreateList (Lb,n2);
printf ("第二个单链表中的元素为:\n");
TravelList (Lb);
printf ("\n\n");
printf ("正在执行合并操作......\n\n\n");
Lc = La;
MergeList (La,Lb,Lc);
printf ("合并后单链表的元素为:\n");
{
L->elem = (ElemType *)malloc(100 * sizeof(ElemType));

数据结构线性表实验报告

数据结构线性表实验报告

数据结构线性表实验报告一、实验目的本次实验的主要目的是深入理解和掌握数据结构中线性表的基本概念、存储结构和操作算法,并通过实际编程实现来提高对线性表的应用能力和编程技能。

二、实验环境本次实验使用的编程语言为C++,开发工具为Visual Studio 2019。

三、实验内容(一)线性表的顺序存储结构顺序表是用一组地址连续的存储单元依次存储线性表的数据元素。

其特点是逻辑上相邻的元素在物理位置上也相邻,便于随机存取,但插入和删除操作需要移动大量元素,效率较低。

(二)线性表的链式存储结构链表是通过指针将一组零散的存储单元链接成一个线性序列。

常见的链表有单链表、双向链表和循环链表。

链表的插入和删除操作只需修改指针,无需移动元素,但随机存取效率较低。

(三)线性表的基本操作实现1、初始化线性表2、销毁线性表3、清空线性表4、判断线性表是否为空5、获取线性表的长度6、获取指定位置的元素7、查找指定元素在线性表中的位置8、在线性表指定位置插入元素9、删除线性表指定位置的元素四、实验步骤(一)顺序表的实现1、定义顺序表的结构体,包括数据存储数组和表的长度。

2、实现顺序表的初始化函数,分配初始存储空间并设置表长度为0。

3、销毁顺序表函数,释放存储空间。

4、清空顺序表函数,将表长度置为 0。

5、判断顺序表是否为空,根据表长度判断。

6、获取顺序表长度,直接返回表长度。

7、获取指定位置元素,检查位置合法性后返回对应元素。

8、查找指定元素位置,遍历表进行比较。

9、插入元素函数,检查插入位置合法性,若合法则移动后续元素,插入新元素并更新表长度。

10、删除元素函数,检查删除位置合法性,若合法则移动后续元素,更新表长度。

(二)链表的实现1、定义链表节点结构体,包含数据域和指针域。

2、实现链表的初始化函数,创建头节点。

3、销毁链表函数,遍历链表释放节点内存。

4、清空链表函数,遍历链表删除节点但保留头节点。

5、判断链表是否为空,检查头节点的指针域是否为空。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》实验报告专业计算机科学与技术班级姓名学号学期指导老师成绩:教师评语:数据结构上机实验报告学号:姓名:所在系:计算机科学与技术班级:实验名称:线性结构基本算法的实现(2)实验日期2018.09.28实验指导教师实验机房------------------------------------------------------------------------------------------------------1. 实验目的:(1) 掌握线性表顺序存储结构的基本操作:插入、删除、查找;(2) 掌握线性表链式结构的基本操作:插入、删除、合并等运算;(3)掌握栈和队列基本运算的算法;2. 实验内容:(1)实现顺序表的创建、插入、删除和查找的操作;(2)实现单链表插入、删除、合并的操作;(3)实现2个有序线性表的合并;(4)利用顺序栈实现数制转换的算法;(5)实现顺序队列各种基本运算的算法;(6)实现链栈各种基本运算的算法;(选做)(7)实现链队列各种基本运算的算法;(选做)3.算法设计(编程思路或流程图或源代码)内容:4)顺序队列的入队、出队和取队头元素的操作设计思路:1、定义结构体SqQueue来表示顺序队列,其中front和rear分别指向队列的头和尾。

2、实现函数int initSqQueue(SqQueue* s)、int appendQueue(SqQueue* s, Elemtype e)、int isEmpty(SqQueue* s)、int deleteQueue(SqQueue* s, Elemtype &e)、Elemtype getHead(SqQueue* s)、void displayQueue(SqQueue* s)、void createQueue(SqQueue* s)分别实现队列的初始化、创建、入队、出队、判断队列是否为空、取头元素、遍历队列等操作。

3、在main函数中用while()循环对不同的操作进行判断,以测试不同的函数源代码:1.#include <stdio.h>2.#include <malloc.h>3.#define MAXNUM 1004.#define Elemtype int5.#define TRUE 16.#define FALSE 07.typedef struct {8. Elemtype* base;9.int front;10.int rear;11.}SqQueue;12.//初始化一个空队列13.int initSqQueue(SqQueue* s) {14. s->base = (Elemtype*)malloc(sizeof(Elemtype)*MAXNUM);15.if (!s->base) {16.return FALSE;17. }18. s->front = s->rear = 0;19.return TRUE;20.}21.//入队列操作22.int appendQueue(SqQueue* s, Elemtype e) {23.if ((s->rear + 1) % MAXNUM == s->front) {24.return FALSE;25. }26. s->base[s->rear] = e;27. s->rear=(s->rear + 1) % MAXNUM;28.return TRUE;29.}30.//判断队列是否为空31.int isEmpty(SqQueue* s) {32.if (s->rear == s->front) {33.return TRUE;34. }35.else {36.return FALSE;37. }38.}39.//出队列操作40.int deleteQueue(SqQueue* s, Elemtype &e) {41.if (isEmpty(s)) {42.return FALSE;43. }44. e = s->base[s->front];45. s->front = (s->front + 1) % MAXNUM;46.return TRUE;47.}48.//获取头元素49.Elemtype getHead(SqQueue* s) {50.if (isEmpty(s)) {51. printf("队列空,没有头元素!\n");52.return 0;53. }54.return s->base[s->front];55.}56.//遍历队列57.void displayQueue(SqQueue* s) {58.int i = s->front;59.if (isEmpty(s)) {60. printf("队列空!\n");61.return;62. }63.else {64. printf("队列的元素为:");65.while (i!=s->rear) {66. printf("%d ", s->base[i]);67. i = (i + 1) % MAXNUM;68. }69. printf("\n");70. }71.}72.//创建队列73.void createQueue(SqQueue* s) {74.int num,i,temp;75. printf("请输入要输入的元素数目:");76. scanf_s("%d", &num);77.for (i = 0; i <num; i++){78. printf("请输入元第%d个元素:",i+1);79. scanf_s("%d", &temp);80. appendQueue(s, temp);81. }82.}83.int main() {84. SqQueue* s=(SqQueue*)malloc(sizeof(SqQueue));85.int e, selected=0;86. printf("\n=====================================\n");87. printf("0.退出\n");88. printf("1.初始化\n");89. printf("2.建立顺序队列\n");90. printf("3.入队\n");91. printf("4.出队\n");92. printf("5.判断队列是否为空\n");93. printf("6.取队头元素\n");94. printf("7.遍历队列\n");95. printf("=====================================\n");96. printf("请选择要进行的操作(1-7):");97.while (scanf("%d", &selected)&&selected!=0) {98.switch (selected)99. {100.case 1:101. initSqQueue(s);102.break;103.case 2:104. createQueue(s);105.break;106.case 3:107. printf("请输入要入队列的元素:"); 108. scanf_s("%d", &e);109. appendQueue(s,e);110.break;111.case 4:112. deleteQueue(s,e);113. printf("出队列的元素为:%d\n",e); 114.break;115.case 5:116.if (isEmpty(s)) {117. printf("队列为空!\n");118. }119.else {120. printf("队列不空!\n");121. }122.break;123.case 6:124. e = getHead(s);125. printf("队头元素为:%d\n", e);126.break;127.case 7:128. displayQueue(s);129.break;130.default:131. printf("操作有误!\n");132.break;133. }134. printf("请选择要进行的操作(1-7):"); 135. }136.return 0;137.}5)利用顺序队列和顺序栈判断一个字符串是否是回文设计思路:1、先初始化一个栈和一个队列2、用户输入一个字符串,储存在数组中3、用for循环遍历数组,分别将里面的字符储存在栈中和队列中4、用while循环做出栈和出队列的操作,同时比较出来的元素是否相等,如果有一个不相等,就直接返回“不是回文”5、在判断队列和栈是否为空,如果都为空则是回文。

QueueAndStack.h头文件中内容:1.#include <stdio.h>2.#include <malloc.h>3.#define MAXNUM 1004.#define Elemtype char5.#define TRUE 16.#define FALSE 07.typedef struct {8. Elemtype* base;9.int front;10.int rear;11.}SqQueue;12.typedef struct stacknode {13. Elemtype data;14. stacknode* next;15.}StackNode;16.typedef struct {17. stacknode* top;//栈顶指针18.}LinkStack;19.20.21.//初始化一个空队列22.int initSqQueue(SqQueue* s) {23. s->base = (Elemtype*)malloc(sizeof(Elemtype)*MAXNUM);24.if (!s->base) {25.return FALSE;26. }27. s->front = s->rear = 0;28.return TRUE;29.}30.//入队列操作31.int appendQueue(SqQueue* s, Elemtype e) {32.if ((s->rear + 1) % MAXNUM == s->front) {33.return FALSE;34. }35. s->base[s->rear] = e;36. s->rear = (s->rear + 1) % MAXNUM;37.return TRUE;38.}39.//判断队列是否为空40.int isEmpty(SqQueue* s) {41.if (s->rear == s->front) {42.return TRUE;43. }44.else {45.return FALSE;46. }47.}48.//出队列操作49.int deleteQueue(SqQueue* s, Elemtype &e) {50.if (isEmpty(s)) {51.return FALSE;52. }53. e = s->base[s->front];54. s->front = (s->front + 1) % MAXNUM;55.return TRUE;56.}57.//获取头元素58.Elemtype getHead(SqQueue* s) {59.if (isEmpty(s)) {60. printf("队列空,没有头元素!\n");61.return 0;62. }63.return s->base[s->front];64.}65.//遍历队列66.void displayQueue(SqQueue* s) {67.int i = s->front;68.if (isEmpty(s)) {69. printf("队列空!\n");70.return;71. }72.else {73. printf("队列的元素为:");74.while (i != s->rear) {75. printf("%d ", s->base[i]);76. i = (i + 1) % MAXNUM;77. }78. printf("\n");79. }80.}81.//创建队列82.void createQueue(SqQueue* s) {83.int num, i, temp;84. printf("请输入要输入的元素数目:");85. scanf_s("%d", &num);86.for (i = 0; i < num; i++) {87. printf("请输入元第%d个元素:", i + 1);88. scanf_s("%d", &temp);89. appendQueue(s, temp);90. }91.}92.93./*初始化栈*/94.void InitStack(LinkStack* s) {95. s->top = NULL;96. printf("\n已初始化链栈!\n");97.}98./*链栈置空*/99.void setEmpty(LinkStack* s) {100. s->top = NULL;101. printf("\n链栈被置空!\n");102.}103./*入栈*/104.void pushLstack(LinkStack* s, Elemtype e) {105. StackNode* p = (StackNode*)malloc(sizeof(StackNode)); 106. p->data = e;107. p->next = s->top;108. s->top = p;109.}110./*出栈*/111.Elemtype popLstack(LinkStack* s) {112. Elemtype e;113. StackNode* p;114. p = s->top;115.if (s->top == NULL) {116. printf("\n栈空,不能出栈!\n");117.return -1;118. }119. e = p->data;120. s->top = p->next;121. free(p);122.return e;123.}124./*取栈顶元素*/125.Elemtype StackTop(LinkStack* s) {126.if (s->top == NULL) {127. printf("\n链栈空!\n");128.return -1;129. }130.return s->top->data;131.}132./*遍历链栈*/133.void displayLstack(LinkStack* s) {134.if (s->top == NULL) {135. printf("连栈空!\n");136.return;137. }138. printf("\n链栈中的数据为:\n");139. printf("==========================================\n");140. StackNode* p;141. p = s->top;142.while (p != NULL) {143. printf("%d\n", p->data);144. p = p->next;145. }146. printf("==========================================\n");147.}148./*判断栈是否为空*/149.int isEmpty(LinkStack* s) {150.if (s->top == NULL) {151.return 1;152. }153.else {154.return 0;155. }156.}main.cpp中的内容:1.#include "QueueAndStack.h"2.#include <string.h>3.4.int isPalindrome(char* str);5.6.int main() {7.char* str = (char*)malloc(sizeof(char)*200);8. printf("请输入要判断的字符串:");9. scanf("%s", str);10.if (isPalindrome(str)) {11. printf("这串字符串是回文。

相关文档
最新文档