数据结构报告

合集下载

数据结构实验报告实验总结

数据结构实验报告实验总结

数据结构实验报告实验总结本次数据结构实验主要涉及线性表、栈和队列的基本操作以及链表的应用。

通过实验,我对这些数据结构的特点、操作和应用有了更深入的了解。

下面对每一部分实验进行总结。

实验一:线性表的基本操作线性表是一种常见的数据结构,本实验要求实现线性表的基本操作,包括插入、删除、查找、遍历等。

在实验过程中,我对线性表的结构和实现方式有了更清晰的认识,掌握了用数组和链表两种方式实现线性表的方法。

实验二:栈的应用栈是一种后进先出(LIFO)的数据结构,本实验要求利用栈实现简单的括号匹配和后缀表达式计算。

通过实验,我了解到栈可以方便地实现对于括号的匹配和后缀表达式的计算,有效地解决了对应的问题。

实验三:队列的应用队列是一种先进先出(FIFO)的数据结构,本实验要求利用队列实现银行排队和迷宫求解。

通过实验,我对队列的应用有了更加深入的了解,了解到队列可以解决需要按顺序处理的问题,如排队和迷宫求解等。

实验四:链表的应用链表是一种常用的数据结构,本实验要求利用链表实现学生信息管理系统。

通过实验,我对链表的应用有了更深入的了解,了解到链表可以方便地实现对于数据的插入、删除和修改等操作,并且可以动态地调整链表的长度,适应不同的需求。

通过本次实验,我掌握了线性表、栈、队列和链表的基本操作,并了解了它们的特点和应用方式。

同时,通过实际编程的过程,我对于数据结构的实现方式和效果有了更直观的认识,也锻炼了自己的编程能力和解决问题的能力。

在实验过程中,我遇到了一些问题,如程序逻辑错误和内存泄漏等,但通过调试和修改,最终成功解决了这些问题,对自己的能力也有了更多的信心。

通过本次实验,我深刻体会到了理论与实践的结合的重要性,也对于数据结构这门课程有了更加深入的理解。

总之,本次数据结构实验给予了我很多有益的启发和收获,对于数据结构的概念、特点和应用有了更深入的理解。

在以后的学习中,我会继续加强对数据结构的学习和研究,不断提高自己的编程能力和解决问题的能力。

数据结构图的实验报告

数据结构图的实验报告

数据结构图的实验报告数据结构图的实验报告引言:数据结构图是计算机科学中重要的概念之一。

它是一种用图形表示数据元素之间关系的数据结构,广泛应用于算法设计、程序开发和系统优化等领域。

本实验报告旨在介绍数据结构图的基本原理、实验过程和结果分析。

一、实验目的本次实验的主要目的是掌握数据结构图的基本概念和操作方法,以及通过实验验证其在解决实际问题中的有效性。

具体而言,我们将通过构建一个社交网络关系图,实现对用户关系的管理和分析。

二、实验方法1. 确定数据结构在本次实验中,我们选择了无向图作为数据结构图的基础。

无向图由顶点集和边集组成,每条边连接两个顶点,且没有方向性。

2. 数据输入为了模拟真实的社交网络,我们首先需要输入一组用户的基本信息,如姓名、年龄、性别等。

然后,根据用户之间的关系建立边,表示用户之间的交流和联系。

3. 数据操作基于构建好的数据结构图,我们可以进行多种操作,如添加用户、删除用户、查询用户关系等。

这些操作将通过图的遍历、搜索和排序等算法实现。

三、实验过程1. 数据输入我们首先创建一个空的无向图,并通过用户输入的方式逐步添加用户和用户关系。

例如,我们可以输入用户A和用户B的姓名、年龄和性别,并建立一条边连接这两个用户。

2. 数据操作在构建好数据结构图后,我们可以进行多种操作。

例如,我们可以通过深度优先搜索算法遍历整个图,查找与某个用户具有特定关系的用户。

我们也可以通过广度优先搜索算法计算某个用户的社交网络影响力,即与该用户直接或间接相连的其他用户数量。

3. 结果分析通过实验,我们可以观察到数据结构图在管理和分析用户关系方面的优势。

它能够快速地找到用户之间的关系,帮助我们了解用户的社交网络结构和影响力。

同时,数据结构图也为我们提供了一种可视化的方式来展示用户之间的关系,使得分析更加直观和易于理解。

四、实验结果通过实验,我们成功构建了一个社交网络关系图,并实现了多种数据操作。

我们可以根据用户的姓名、年龄和性别等信息进行查询,也可以根据用户之间的关系进行遍历和排序。

数据结构实验报告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) 循环链表的基本操作:插入节点、删除节点、查找节点等。

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

数据结构报告正文

数据结构报告正文

数据结构报告正文数据结构报告正文一、引言本报告旨在对数据结构进行详细分析和讨论。

数据结构作为计算机科学的基础之一,对于理解和运用计算机算法至关重要。

本文将介绍数据结构的定义、分类和基本操作,同时还将讨论一些常见的数据结构及其应用。

二、数据结构的定义和分类2-1 定义数据结构是指数据对象中数据元素之间的逻辑关系和物理存储关系。

它关注数据的组织方式,包括数据的存储结构和操作方法。

2-2 分类2-2-1 线性结构线性结构是一种数据元素之间存在一对一关系的结构,包括线性表、栈和队列。

2-2-2 非线性结构非线性结构是一种数据元素之间存在一对多或多对多关系的结构,其中包括树和图。

三、数据结构的基本操作3-1 插入操作插入操作是向指定位置插入一个新元素。

3-2 删除操作删除操作是从指定位置删除一个元素。

3-3 查找操作查找操作是寻找指定元素在数据结构中的位置。

3-4 修改操作修改操作是修改指定位置的元素值。

四、常见的数据结构及其应用4-1 数组数组是一种顺序存储的数据结构,可以存储多个相同类型的元素。

它的应用包括存储和处理一系列数据、实现矩阵和图等。

4-2 链表链表是一种动态存储的数据结构,通过指针将一组节点串联起来。

它的应用包括实现树和图等。

4-3 栈栈是一种后进先出(LIFO)的数据结构,只允许在表的一端进行插入和删除操作。

它的应用包括实现函数调用、表达式求值等。

4-4 队列队列是一种先进先出(FIFO)的数据结构,允许在表的一端插入元素,在另一端删除元素。

它的应用包括实现广度优先搜索、模拟行为等。

4-5 树树是一种分层存储的数据结构,由节点和边组成。

它的应用包括实现文件系统、数据库索引等。

4-6 图图是一种由节点和边组成的数据结构,描述了节点之间的关系。

它的应用包括实现社交网络、路线规划等。

五、附件本文档附带以下附件:附件1:代码示例附件2:相关图表六、法律名词及注释6-1 法律名词6-1-1 数据隐私:指个人信息在处理、存储和传输过程中的隐私保护。

数据结构报告

数据结构报告

数据结构报告一、介绍数据结构是计算机科学中非常重要的一门学科,它研究如何在计算机内存中存储和组织数据,以及如何有效地进行数据操作和操控。

数据结构的设计和选择对于计算机程序的性能和效率有重要影响。

本报告将介绍几种常见的数据结构及其应用。

二、线性数据结构1. 数组数组是最简单也是最常用的数据结构之一。

它是一组连续存储的元素,并可以通过索引来访问每个元素。

数组的优点是访问元素快速,缺点是大小固定,插入和删除操作较为耗时。

2. 链表链表是另一种常见的线性数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。

链表的优点是插入和删除操作快速,缺点是访问元素需要遍历整个链表。

3. 栈栈是一种后进先出(LIFO)的数据结构。

它可以通过push操作将元素添加到栈顶,并通过pop操作从栈顶删除元素。

栈常用于实现函数调用、表达式求值等场景。

4. 队列队列是一种先进先出(FIFO)的数据结构。

它可以通过enqueue操作在队尾添加元素,并通过dequeue操作从队头删除元素。

队列常用于实现任务调度、消息传递等场景。

三、非线性数据结构1. 树树是一种层次结构的数据结构。

它由一组节点和连接节点的边组成,其中一个节点被称为根节点,它没有父节点。

树的优点是可以高效地搜索、插入和删除元素,常用于实现搜索树、哈夫曼树等。

2. 图图是一种由节点和边组成的非线性数据结构。

节点可以表示实体,边表示节点之间的关系。

图的优点是能够表示复杂的关系网络,常用于社交网络分析、路径规划等。

四、高级数据结构1. 哈希表哈希表是一种根据关键字直接访问内存位置的数据结构。

它通过哈希函数将关键字映射到哈希表中的索引位置,以实现快速查找。

哈希表常用于实现字典、缓存等。

2. 堆堆是一种特殊的树形数据结构,它满足堆属性:对于任意节点X,X的父节点的值大于等于(或小于等于)X的值。

堆常用于实现优先队列、堆排序等。

五、应用案例1. 搜索引擎搜索引擎需要高效地存储和检索大量的网页信息,常用的数据结构包括倒排索引、哈希表等。

数据结构的实习报告

数据结构的实习报告

一、实习背景数据结构是计算机科学中的基础课程,对于学习计算机编程、算法设计等方面具有重要意义。

为了更好地掌握数据结构知识,提高自己的编程能力,我参加了为期一个月的数据结构实习。

二、实习目标1. 掌握数据结构的基本概念和常用算法;2. 能够运用所学知识解决实际问题;3. 提高编程能力和团队协作能力。

三、实习内容1. 需求分析本次实习主要实现以下功能:(1)实现线性表、栈、队列、链表、树、图等基本数据结构;(2)实现查找和排序算法,如顺序查找、折半查找、快速排序、归并排序等;(3)设计并实现一个简单的学生管理系统,用于存储和管理学生的基本信息。

2. 设计说明(1)数据结构设计本次实习主要使用C语言实现数据结构,具体包括:- 线性表:使用数组实现静态线性表,使用链表实现动态线性表;- 栈和队列:使用数组实现栈和队列;- 树:使用链表实现二叉树;- 图:使用邻接矩阵和邻接表实现图。

(2)算法设计本次实习主要实现以下算法:- 查找算法:顺序查找、折半查找;- 排序算法:快速排序、归并排序;- 学生管理系统:使用链表实现学生信息存储,通过查找算法实现按学号或姓名查找学生信息。

(3)模块设计本次实习将整个程序划分为以下模块:- 数据结构模块:实现各种数据结构的基本操作;- 查找算法模块:实现查找算法;- 排序算法模块:实现排序算法;- 学生管理系统模块:实现学生管理系统的功能。

3. 上机结果及体会(1)合作人编码分工在本次实习中,我与同学合作完成编程任务。

我负责数据结构模块和查找算法模块的设计与实现,同学负责排序算法模块和学生管理系统模块的设计与实现。

(2)实际完成情况本次实习成功实现了以下功能:- 实现了线性表、栈、队列、链表、树、图等基本数据结构;- 实现了顺序查找、折半查找、快速排序、归并排序等查找和排序算法;- 设计并实现了一个简单的学生管理系统,能够存储和管理学生的基本信息。

(3)程序性能分析本次实习程序的性能分析如下:- 数据结构模块:使用链表实现数据结构,具有良好的动态性,空间复杂度较低;- 查找算法模块:顺序查找和折半查找算法的时间复杂度分别为O(n)和O(logn),适用于不同场景;- 排序算法模块:快速排序和归并排序算法的时间复杂度均为O(nlogn),适用于大数据量排序;- 学生管理系统模块:使用链表实现学生信息存储,查询效率较高。

数据结构报告

数据结构报告

数据结构报告在计算机科学中,数据结构是用于组织和存储数据的方式。

它是计算机算法的基础,对于解决复杂问题非常重要。

本报告将介绍一些常见的数据结构及其应用。

一、线性数据结构线性数据结构是最简单的数据结构之一,其元素有确定的顺序。

常见的线性数据结构包括数组、链表和栈。

1. 数组数组是一种连续存储元素的数据结构,可以通过索引快速访问元素。

它适用于需要频繁访问元素的情况,但删除和插入元素较为耗时。

2. 链表链表是一种动态数据结构,由节点组成,每个节点包含数据和指向下一个节点的指针。

链表适用于查找和插入元素频繁的情况,但访问元素的效率较低。

3. 栈栈是一种后进先出(LIFO)的数据结构,只能在栈顶进行插入或删除操作。

它在操作系统中的函数调用、表达式求值等场景中广泛应用。

二、非线性数据结构非线性数据结构中的元素之间没有明确的顺序关系,常见的非线性数据结构包括树和图。

1. 树树是一种层次结构,由节点组成,每个节点可以有多个子节点。

常见的树结构有二叉树、平衡树和B树。

树结构广泛应用于文件系统、数据库等领域。

2. 图图是由节点和边组成的数据结构,节点表示实体,边表示实体间的关系。

图可以用于建模网络、社交网络等复杂关系结构。

三、高级数据结构除了线性和非线性数据结构外,还有一些高级数据结构用于解决特定的问题。

1. 堆堆是一种完全二叉树,可以用数组实现。

它满足堆序性质,即父节点的键值总是大于或等于其子节点。

堆常用于实现优先队列等数据结构。

2. 哈希表哈希表使用哈希函数将输入映射到固定大小的数组中。

它可以快速插入和查找元素,适用于需要频繁进行查找操作的场景。

3. 图的搜索算法图的搜索算法包括深度优先搜索(DFS)和广度优先搜索(BFS)。

它们用于解决图的遍历和路径搜索问题。

总结:数据结构是计算机科学中的重要概念,它为解决复杂问题提供了基础。

本报告介绍了线性数据结构(数组、链表和栈)、非线性数据结构(树和图)以及高级数据结构(堆、哈希表和图的搜索算法)的基本概念和应用场景。

数据结构的实验报告

数据结构的实验报告

一、实验目的本次实验旨在让学生掌握数据结构的基本概念、逻辑结构、存储结构以及各种基本操作,并通过实际编程操作,加深对数据结构理论知识的理解,提高编程能力和算法设计能力。

二、实验内容1. 线性表(1)顺序表1)初始化顺序表2)向顺序表插入元素3)从顺序表删除元素4)查找顺序表中的元素5)顺序表的逆序操作(2)链表1)创建链表2)在链表中插入元素3)在链表中删除元素4)查找链表中的元素5)链表的逆序操作2. 栈与队列(1)栈1)栈的初始化2)入栈操作3)出栈操作4)获取栈顶元素5)判断栈是否为空(2)队列1)队列的初始化2)入队操作3)出队操作4)获取队首元素5)判断队列是否为空3. 树与图(1)二叉树1)创建二叉树2)遍历二叉树(前序、中序、后序)3)求二叉树的深度4)求二叉树的宽度5)二叉树的镜像(2)图1)创建图2)图的深度优先遍历3)图的广度优先遍历4)最小生成树5)最短路径三、实验过程1. 线性表(1)顺序表1)初始化顺序表:创建一个长度为10的顺序表,初始化为空。

2)向顺序表插入元素:在顺序表的第i个位置插入元素x。

3)从顺序表删除元素:从顺序表中删除第i个位置的元素。

4)查找顺序表中的元素:在顺序表中查找元素x。

5)顺序表的逆序操作:将顺序表中的元素逆序排列。

(2)链表1)创建链表:创建一个带头结点的循环链表。

2)在链表中插入元素:在链表的第i个位置插入元素x。

3)在链表中删除元素:从链表中删除第i个位置的元素。

4)查找链表中的元素:在链表中查找元素x。

5)链表的逆序操作:将链表中的元素逆序排列。

2. 栈与队列(1)栈1)栈的初始化:创建一个栈,初始化为空。

2)入栈操作:将元素x压入栈中。

3)出栈操作:从栈中弹出元素。

4)获取栈顶元素:获取栈顶元素。

5)判断栈是否为空:判断栈是否为空。

(2)队列1)队列的初始化:创建一个队列,初始化为空。

2)入队操作:将元素x入队。

3)出队操作:从队列中出队元素。

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

数据结构作业学院名称电气工程学院指导老师廖湘柏班级电子信息工程071班学号学生姓名2010 年 6 月一、问题描述:设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。

在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。

若车场内已停满n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。

当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门后,其他车辆再按原次序返回车场。

每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)。

基本要求:(1)要求以顺序栈模拟停车场,以链队列模拟便道。

(2)从终端读入汽车到达或离去的数据,每组数据包括三项:1、是“到达”还是“离去”;2、汽车牌照号码;3、“到达”或“离去”的时刻。

与每组输入信息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用。

设计思路:1、根据题目要求,确定系统功能;2、根据系统功能,确定实现方法和编程方式;3、设计操作界面和功能选项;4、对程序进行调试;5、查看程序运行的结果并对程序加以修改;程序如下;2#include "stdafx.h"#include <iostream>#include <string>#include <deque>#include <stack>#include <algorithm>using namespace std;string tempNum;struct car {string carNumber;int startTime;};bool Equal(const car& car1){return car1.carNumber == tempNum;}int main (void){cout << "说明:本程序假设前提条件为停车场初始情况为满,并且时间以整形表示..." << endl;deque<car> carStop;deque<car> carWay;int carNum;cout << "请输入停车场现有的车辆数: " << endl;cin >> carNum;int carMax = carNum;cout << "请输入这些车辆的信息:(车牌号到达时间)" << endl;while (carNum--) {car carInfo;cin >> carInfo.carNumber >> carInfo.startTime;carStop.push_back(carInfo);}string stat;while (cout << "请输入车辆到达离开情况:(到达/离开车牌号到达/离开时间) " << endl && cin >> stat) {if (stat == "到达") {car carTemp;cin >> carTemp.carNumber >> carTemp.startTime;if (carStop.size() == carMax) {carWay.push_back(carTemp);cout << "这辆车在便道的第" << carWay.size() << "位" << endl;}else {carStop.push_back(carTemp);cout << "这辆车在停车场的第" << carStop.size() << "位" << endl;}}else {int leaveTime;cin >> tempNum >> leaveTime;if (find_if(carStop.begin(), carStop.end(), Equal) != carStop.end()) {stack<car> temp;while (carStop.back().carNumber != tempNum) {temp.push(carStop.back());carStop.pop_back();}cout << "这辆车停在停车场的时间为" << leaveTime - carStop.back().startTime << endl;carStop.pop_back();while (!temp.empty()) {carStop.push_back(temp.top());temp.pop();}if (!carWay.empty()) {car tempCar = carWay.front();tempCar.startTime = leaveTime;carStop.push_back(tempCar);carWay.pop_front();}}elsecout << "在停车场中找不到此车,(可能已经离开或还在便道)请重新输入! " << endl;}}return 0;}二、问题描述:对单位的职工进行管理,包括插入、删除、查找、排序等功能。

要求:职工对象包括姓名、性别、出生年月、学历、职务、住址、电话等信息。

(1)新增一名职工:将新增职工对象按姓名以字典方式插入到职工管理文件中。

(2)删除一名职工:从职工管理文件中删除一名职工对象。

(3)查询:从职工管理文件中查询符合某些条件的职工。

(折半查找法)(4)排序:按某种需要对职工对象文件进行排序。

(插入,冒泡,选择,选其中方法之一)设计思路:1、根据题目要求,确定系统功能;2、根据系统功能,确定实现方法和编程方式;3、设计操作界面和功能选项;4、对程序进行调试5、查看程序运行的结果并对程序加以修改;程序如下;// aaa.cpp : 定义控制台应用程序的入口点。

//#include "stdafx.h"#include "stdio.h"#include "stdlib.h"#include "string.h"int shoudsave=0; /* */ struct student{char num[10];/* 学号 */ char name[20];char sex[4];int age;int birth;int tele;char addr[30];};typedef struct node {struct student data;struct node *next;}Node,*Link;/********************************************************** ***************************/void menu(){printf("*************************************************** *****************************");printf("\t1登记职工资料\t\t\t\t\t2删除职工资料\n"); printf("\t3查询职工资料\t\t\t\t\t4修改职工资料\n"); printf("\t5保存职工资料\t\t\t\t\t6排序职工信息\n"); printf("\t0退出系统\n");printf("*************************************************** *****************************\n");}/********************************************************** ***************************/void printstart(){printf("-----------------------------------------------------------------------\n");}void Wrong(){printf("\n=====>提示:输入错误!\n");}void Nofind(){printf("\n=====>提示:没有找到该职工!\n");}void printc() /* 本函数用于输出中文 */{printf(" 职工号\t 姓名性别 \t 电话 \t 出生年月\t 年龄\t 地址\n");}/********************************************************** ***************************/void printe(Node *p)/* 本函数用于输出英文 */{printf("%-12s%s\t%s\t%d\t%d\t%d\t%s\n",p->data.num,p->,p->data.sex,p->data.tele,p->da ta.birth,p->data.age,p->data.addr);}Node* Locate(Link l,char findmess[],char nameornum[]) /* 该函数用于定位连表中符合要求的接点,并返回该指针 */{Node *r;if(strcmp(nameornum,"num")==0) /* 按职工号查询 */{r=l->next;while(r!=NULL){if(strcmp(r->data.num,findmess)==0)return r;r=r->next;}}else if(strcmp(nameornum,"name")==0) /* 按姓名查询 */ {r=l->next;while(r!=NULL){if(strcmp(r->,findmess)==0)return r;r=r->next;}}return 0;}/********************************************************** ***************************/void Add(Link l) /* 增加职工 */{Node *p,*r,*s;char num[10];r=l;s=l->next;while(r->next!=NULL)r=r->next; /* 将指针置于最末尾 */while(1){printf("请你输入职工号(以'0'返回上一级菜单:)");scanf("%s",num);if(strcmp(num,"0")==0)break;while(s){if(strcmp(s->data.num,num)==0){printf("=====>提示:职工为'%s'的职工已经存在,若要修改请你选择'4 修改'!\n",num);printstart();printc();printe(s);printstart();printf("\n");return;}s=s->next;}p=(Node *)malloc(sizeof(Node));strcpy(p->data.num,num);printf("请你输入姓名:");scanf("%s",p->); getchar();printf("请你输入性别:");scanf("%s",p->data.sex); getchar();printf("请你输入年龄:");scanf("%d",&p->data.age);getchar();printf("请你输入出生年月:");scanf("%d",&p->data.birth);getchar();printf("请你输入电话:");scanf("%d",&p->data.tele);getchar();printf("请输入地址:");scanf("%s",&p->data.addr);getchar();/* 信息输入已经完成 */p->next=NULL;r->next=p;r=p;shoudsave=1;}}/********************************************************** ***************************/void Qur(Link l) /* 查询职工 */{int sel;char findmess[20];Node *p;if(!l->next){printf("\n=====>提示:没有资料可以查询!\n");return;}printf("\n=====>1按学号查找\n=====>2按姓名查找\n"); scanf("%d",&sel);if(sel==1)/* 学号 */{printf("请你输入要查找的职工号:");scanf("%s",findmess);p=Locate(l,findmess,"num");if(p)printf("\t\t\t\t查找结果\n"); printstart();printc();printe(p);printstart();}elseNofind();}else if(sel==2) /* 姓名 */{printf("请你输入要查找的姓名:"); scanf("%s",findmess);p=Locate(l,findmess,"name");if(p){printf("\t\t\t\t查找结果\n"); printstart();printc();printe(p);printstart();elseNofind();}elseWrong();}/********************************************************** ***************************/void max(Node k[],int x){Node NB;int sb;int max=0;int i=0;int j=0;while(j<x){i=j;max=0;while(i<x){if(k[i].data.age>max){max=k[i].data.age;sb=i;}i++;}NB=k[j];k[j]=k[sb];k[sb]=NB;j++;}}/********************************************************** ***************************/void Paixu(Link l) /* 排序职工 */{Link c;int sel;char findmess[20];Node *p;Node *r;Node k[1000];int i=0;int x;if(!l->next){printf("\n=====>提示:没有资料可以排序!\n"); return;}printf("\t\t\t\t查找结果\n");printstart();printc();r=l->next;while(r){k[i]=*r;r=r->next;i++;}max(k,i);x=i;i=0;while(i<x){printf("%-12s%s\t%s\t%d\t%d\t%d\t%s\n",k[i].data.num,k[i],k[i].data.sex,k[i].data.te le,k[i].data.birth,k[i].data.age,k[i].data.addr);i++;}}/********************************************************** ***************************/void Del(Link l) /* 删除 */{int sel;Node *p,*r;char findmess[20];if(!l->next){printf("\n=====>提示:没有资料可以删除!\n");return;}printf("\n=====>1按职工号删除\n=====>2按姓名删除\n"); scanf("%d",&sel);if(sel==1){printf("请你输入要删除的职工号:");scanf("%s",findmess);p=Locate(l,findmess,"num");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf("\n=====>提示:该职工已经成功删除!\n"); shoudsave=1;}elseNofind();}else if(sel==2){printf("请你输入要删除的姓名:");scanf("%s",findmess);p=Locate(l,findmess,"name");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf("\n=====>提示:该职工已经成功删除!\n");shoudsave=1;}elseNofind();}elseWrong();}/********************************************************** ***************************/void Modify(Link l){Node *p;char findmess[20];if(!l->next){printf("\n=====>提示:没有资料可以修改!\n"); return;}printf("请你输入要修改的职工学号:");scanf("%s",findmess);p=Locate(l,findmess,"num");if(p){printf("请你输入新职工号:");scanf("%s",p->data.num);printf("请你输入新姓名:");scanf("%s",p->);getchar();printf("请你输入新性别:");scanf("%s",p->data.sex);printf("请你输入新的年龄:");scanf("%d",&p->data.age);getchar();printf("请你输入新的出生年月:");scanf("%d",&p->data.birth);getchar();printf("请你输入新的电话:");scanf("%d",&p->data.tele);printf("请输入新的地址:");scanf("%s",&p->data.tele);printf("\n=====>提示:资料修改成功!\n");shoudsave=1;}elseNofind();}/********************************************************** ****************************************/void Disp(Link l){int count=0;Node *p;p=l->next;if(!p){printf("\n=====>提示:没有资料可以显示!\n");return;}printf("\t\t\t\t显示结果\n");printstart();printc();printf("\n");while(p){printe(p);p=p->next;}printstart();printf("\n");}/********************************************************** ***************************/void Tongji(Link l){Node *pm,*pe,*pc; /* 用于指向分数最高的接点 */ Node *r=l->next;if(!r){printf("\n=====>提示:没有资料可以统计!\n"); return ;}pm=pe=pc=r;while(r!=NULL){if(r->data.age>=pc->data.age)pc=r;if(r->data.birth>=pm->data.birth)pm=r;if(r->data.tele>=pe->data.tele)pe=r;r=r->next;}}/********************************************************** ***************************/void Sort(Link l){Link ll;Node *p,*rr,*s;ll=(Link)malloc(sizeof(Node)); /* 用于做新的连表 */ll->next=NULL;if(l->next==NULL){printf("\n=====>提示:没有资料可以排序!\n");return ;}p=l->next;while(p){s=(Node*)malloc(sizeof(Node)); /* 新建接点用于保存信息 */ s->data=p->data;s->next=NULL;rr=ll;while(rr->next!=NULL )rr=rr->next;if(rr->next==NULL)rr->next=s;else{s->next=rr->next;rr->next=s;}p=p->next;}free(l);l->next=ll->next;printf("\n=====>提示:排序已经完成!(本排序按照年龄由大到小排序)\n");}/********************************************************** ***************************/void Save(Link l){FILE* fp;Node *p;int flag=1,count=0;fp=fopen("c:\\student","wb");if(fp==NULL){printf("\n=====>提示:重新打开文件时发生错误!\n");exit(1);}p=l->next;while(p){if(fwrite(p,sizeof(Node),1,fp)==1){p=p->next;count++;}else{flag=0;break;}}if(flag){printf("\n=====>提示:文件保存成功.(有%d条记录已经保存.)\n",count);shoudsave=0;}fclose(fp);}/********************************************************** ***************************/int main(){Link l;/* 连表 */FILE *fp; /* 文件指针 */int sel;char ch;char jian;int count=0;Node *p,*r;printf("\t\t\t\t职工管理系统\n");l=(Node*)malloc(sizeof(Node));l->next=NULL;r=l;fp=fopen("C:\\student","rb");if(fp==NULL){printf("\n=====>提示:文件还不存在,是否创建?(y/n)\n"); scanf("%c",&jian);if(jian=='y'||jian=='Y')fp=fopen("C:\\student","wb");elseexit(0);}printf("\n=====>提示:文件已经打开,正在导入记录......\n");while(!feof(fp)){p=(Node*)malloc(sizeof(Node));if(fread(p,sizeof(Node),1,fp)) /* 将文件的内容放入接点中 */ {p->next=NULL;r->next=p;r=p; /* 将该接点挂入连中 */count++;}}fclose(fp); /* 关闭文件 */printf("\n=====>提示:记录导入完毕,共导入%d条记录.\n",count);while(1){menu();printf("请你选择操作:");scanf("%d",&sel);if(sel==0){if(shoudsave==1){ getchar();printf("\n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?\n");scanf("%c",&ch);if(ch=='y'||ch=='Y')Save(l);}printf("\n=====>提示:你已经退出系统,再见!\n");break;}switch(sel){case 1:Add(l);break; /* 增加职工 */case 2:Del(l);break;/* 删除职工 */case 3:Qur(l);break;/* 查询职工 */case 4:Modify(l);break;/* 修改职工 */case 5:Save(l);break;/* 保存职工 */case 6:Paixu(l);break;/*排序*/case 9:printf("\t\t\t==========帮助信息==========\n");break;default: Wrong();getchar();break;}}return 0;}/* */。

相关文档
最新文档