数据结构大作业报告
《数据结构》-实验报告1

《数据结构》-实验报告1-CAL-FENGHAI.-(YICAI)-Company One1xxx 实验报告一、实验目的1.熟悉上机环境,进一步掌握语言的结构特点。
2.掌握线性表的顺序存储结构的定义及实现。
3.掌握线性表的链式存储结构——单链表的定义及实现。
4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。
5.掌握线性表在链式存储结构——单链表中的各种基本操作。
二、实验内容1.顺序线性表的建立、插入及删除。
2.链式线性表的建立、插入及删除。
三、实验步骤1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。
2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素68。
3.建立一个带头结点的单链表,结点的值域为整型数据。
要求将用户输入的数据按尾插入法来建立相应单链表。
四、程序主要语句及作用1)程序1的主要代码(附简要注释)#include<iostream>using namespace std;#define MAXSIZE 1024//#define OVERFLOW 0//#define NULL 0#define OK 1#define MAXSIZE 1024typedef int elemtype; /* 线性表中存放整型元素 */typedef struct //结构定义头文件sqlist.h{ elemtype vec[MAXSIZE];int len; /* 顺序表的长度 */}sqlist;int initlist(sqlist *L,int k){ int i;printf("Input the list:");for( i=0;i<k;i++)scanf("%d", &L->vec[i]);//cin>>L->vec[i];同效,注意输入时地址"&"return OK;}// 以下是整个源程序:#include"sqlist.h"int main(){ int i,n;sqlist *L,a; //定义表的变量printf("\n Input the length of the list L:\n");scanf("%d",&n);L=&a; //指针引用,如果去掉L=&a语句,会出现什么结果?L->len=n; //将长度传给leninitlist(L,n);printf("Output the list and its length:\n");for(i=0;i<n;i++)printf("%d ", L->vec[i]);printf("\nThis sqlist's length is %d", L->len);system("pause");return 0;}2)程序2的主要代码(附简要注释)/*顺序表的插入利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31}然后在第i个位置插入元素68。
数据结构实验报告实验5

数据结构实验报告实验5一、实验目的本次实验的主要目的是深入理解和掌握常见的数据结构,如链表、栈、队列、树和图等,并通过实际编程实现,提高对数据结构的操作和应用能力。
同时,培养解决实际问题的思维和编程能力,提高代码的可读性、可维护性和效率。
二、实验环境本次实验使用的编程语言为C++,开发环境为Visual Studio 2019。
三、实验内容1、链表的基本操作创建链表插入节点删除节点遍历链表2、栈的实现与应用用数组实现栈用链表实现栈栈的应用:括号匹配3、队列的实现与应用用数组实现队列用链表实现队列队列的应用:排队模拟4、二叉树的遍历前序遍历中序遍历后序遍历5、图的表示与遍历邻接矩阵表示法邻接表表示法深度优先遍历广度优先遍历四、实验步骤1、链表的基本操作创建链表:首先定义一个链表节点结构体,包含数据域和指向下一个节点的指针域。
然后通过动态内存分配创建链表节点,并将节点逐个连接起来,形成链表。
插入节点:根据插入位置的不同,分为在表头插入、在表尾插入和在指定位置插入。
在指定位置插入时,需要先找到插入位置的前一个节点,然后进行节点的连接操作。
删除节点:同样需要根据删除位置的不同进行处理。
删除表头节点时,直接将头指针指向下一个节点;删除表尾节点时,找到倒数第二个节点,将其指针置为空;删除指定位置节点时,找到要删除节点的前一个节点,然后调整指针。
遍历链表:通过从链表头开始,依次访问每个节点,输出节点的数据。
2、栈的实现与应用用数组实现栈:定义一个固定大小的数组作为栈的存储空间,同时用一个变量记录栈顶位置。
入栈操作时,先判断栈是否已满,如果未满则将元素放入栈顶位置,并更新栈顶位置;出栈操作时,先判断栈是否为空,如果不空则取出栈顶元素,并更新栈顶位置。
用链表实现栈:与链表的操作类似,将新元素添加在链表头部作为栈顶。
括号匹配:输入一个包含括号的字符串,使用栈来判断括号是否匹配。
遇到左括号入栈,遇到右括号时与栈顶的左括号进行匹配,如果匹配成功则出栈,否则括号不匹配。
数据结构大作业-哈夫曼编码实验报告

一.构造过程①统计可知,字符串全长共59个字符,其中字符‘A’-‘F’的出现频数及对应概率(保留两位小数)如图所示:②将每个字符出现概率作为权重,则对于上述给定的6个权值{25,15,14,20,17,9},依次构造6棵只有根节点的二叉树,共同构成森林F;③在森林F中,选取权重最小和次小的两颗树,分别作为新二叉树的左子树、右子树,且该树根节点权值赋左右子树权值之和;④从森林F中删除已选中的两棵子树,把新得到的二叉树加入F 中;⑤重复③④,直到森林F中仅留下一棵树时,得到最终的哈夫曼树HF如图所示:⑥对上述哈夫曼树,将其树中的每个左分支赋0、右分支赋1,则从根结点开始到叶子结点,各分支路径分别得到对应的二进制串,即为给定的每个字符的哈夫曼编码。
二、代码实现源代码如下:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 6 //指定的编码字符数#define M (2 * N - 1) //HT结点数#define MAXWEIGHT 100typedef struct { //哈夫曼树的存储表示int weight;int parent, lchild, rchild;}HTNode;typedef HTNode HuffmanTree[M + 1];typedef char* HuffmanCode[N + 1]; //哈夫曼编码表void Select(HuffmanTree HT, int n, int& s1, int& s2);void CreateHuffmanTree(HuffmanTree& HT, int* w, int n); void CreateHuffmanCode(HuffmanTree HT, HuffmanCode& HC); void PrintHC(HuffmanCode HC, char ch[]);int main() {HuffmanTree HT;HuffmanCode HC;int w[N + 1];char ch[N + 1];printf("Please input %d characters & its weight(e.g. A 25):\n", N);for (int i = 1; i <= N; i++) {scanf("%c %d", &ch[i], &w[i]);getchar();}CreateHuffmanTree(HT, w, N);CreateHuffmanCode(HT, HC);PrintHC(HC, ch);return 0;}void Select(HuffmanTree HT, int n, int& s1, int& s2) { int i, min = 0, temp = MAXWEIGHT;for (i = 1; i <= n; i++) {if (!HT[i].parent) {if (temp > HT[i].weight) {temp = HT[i].weight;min = i; //最小值作为新树左子树}}}s1 = min;for (i = 1, min = 0, temp = MAXWEIGHT; i <= n; i++) { if ((!HT[i].parent) && i != s1) {if (temp > HT[i].weight) {temp = HT[i].weight;min = i; //次小值作为新树右子树}}}s2 = min;}void CreateHuffmanTree(HuffmanTree& HT, int* w, int n) { //创建哈夫曼树HTint i, s1, s2;if (n <= 1) return; //树为空或仅有根节点for (i = 1; i <= M; ++i) { //初始化HT[i].weight = w[i];HT[i].parent = 0;HT[i].lchild = 0;HT[i].rchild = 0;}for (i = n + 1; i <= M; ++i) { //创建新二叉树Select(HT, i - 1, s1, s2);HT[s1].parent = i;HT[s2].parent = i;HT[i].lchild = s1;HT[i].rchild = s2;HT[i].weight = HT[s1].weight + HT[s2].weight;}}void CreateHuffmanCode(HuffmanTree HT, HuffmanCode& HC) {int i, start, c, f;char cd[N];cd[N - 1] = '\0'; //编码结束符for (i = 1; i <= N; i++) { //对于第i个待编码字符即第i个带权值的叶子节点start = N - 1; //开始start指向结束符位置c = i;f = HT[i].parent; //f指向当前结点的双亲while (f) { //从叶上溯,到根节点跳出if (HT[f].lchild == c)cd[--start] = '0'; //左孩子elsecd[--start] = '1'; //右孩子c = f;f = HT[f].parent;}HC[i] = new char[N - start];strcpy(HC[i], &cd[start]); //复制结果到编码表,用于输出}}void PrintHC(HuffmanCode HC, char ch[]) { //打印哈夫曼编码表for (int i = 1; i <= N; i++)printf("\n%c: %s\n", ch[i], HC[i]);}三,输出各个字母的哈夫曼编码:四、算法分析1、哈夫曼编码是最优前缀编码:对包括N个字符的数据文件,分别以它们的出现概率构造哈夫曼树,利用该树对应的哈夫曼编码对报文进行编码,得到压缩后的最短二进制编码;2、算法自底而上地构造出对应最优编码的二叉树HT,它从n个叶子结点开始,识别出最低权重的两个对象,并将其合并;当合并时,新对象的权重设置为原两个对象权值之和,一共执行了|n| - 1次合并操作;3、是贪心算法:每次选择均为当下的最优选择,通过合并来构造最优树得到对应的哈夫曼编码;4、复杂度:①时间复杂度:有n个终端节点,构成的哈夫曼树总共有2n-1个节点,Select函数的时间复杂度为O(n),嵌套for循环,因此建立哈夫曼树的时间复杂度为O(n^2),创建哈弗曼编码表的时间复杂度为O(n^2);②空间复杂度:算法中临时占用存储空间大小为数组第0号空间,其耗费的空间复杂度为O(1)。
数据结构大作业

南昌大学实验报告实验名称:线性表的顺序存储实现及链式存储实现学生姓名:学号:80023120 专业班级:电子商务121班实验类型:□验证□综合□设计□创新实验目的1.熟悉掌握线性表的两种存储实现方式。
2.熟悉掌握线性表的两种存储实现方式下的一些基本操作。
试验内容1.写出顺序表的class和一些关于顺序表的操作函数。
2.写出单链表的class和一些关于单链表的操作函数。
3.写出双向链表的class和一些关于双向链表的操作函数。
4.测试类中实现的操作函数。
实验步骤1、顺序表类是指采用顺序存储结构来表示线性表的类。
线性表采用顺序存储结构,其数组和线性表长可以作为类的数据成员。
创建一个类const int MAXSIZE=100; //数组的容量最大值为100class SqList{ private:ElemType elem[MAXSIZE]; //数组int length; //线性表长public:SqList( void); //构造函数~SqList(){ }; //析构函数void Creat() ; //初建一个简表函数void PrintOut(); //输出线性表函数void Insert( int i, ElemType e); //插入函数ElemType Delet(int i); //删除函数};//类定义结束{ cout<<"\n Input length="; cin>>length;cout<<"\n Input Data:\n" ;for(int k=0; k<length;k++) cin>>elem[k];}void SqList::PrintOut() //输出线性表函数{cout<<"\n length="<<length ;cout<<"\n PrintOut Data:\n" ;for(int k=0; k<length;k++) cout<<setw(6)<<elem[k];cout<<endl;}2、单链表:假设一个线性表有n个元素,则这n个元素所对应的n个节点就通过指针(是计算机内某个存储单元的地址)链接成一个链表由于这种链表中每个节点只有一个指针域,故称为单链表。
数据结构程序设计作业报告

《数据结构程序设计》作业报告作业名称: 图书信息管理程序学院计算机科学与工程学院专业计算机软件学生姓名梁强学号200931581269任课教师张见威提交日期2011-9-1一、问题描述1..1 需求分析随着互联网发展电脑走进了千家万户,而同学在学习的过程中都会买很多的书,如何管理好自己的书,这是个现实的问题。
为了方便自己的图书管理,设计一个简单实用的图书管理系统。
本程序基本实现了总基本设计要求,并在基本设计要求上实现了更多功能。
使用了结构与类,并对其进行了合理设计使用了文件类对文件进行操作,程序中设计了文本文件与二进制文件该图书系统使用双文件保存,一个reader文件保存用户的信息,一个文件book保存图书信息。
在修改信息时实现了先对内存的修改,再实现对文件的修改。
实现了对信息的查询同时在程序操作过程中有合理的中文提示,每个功能都设立了菜单,使得界面更加直观友好该系统主要有三个主界面。
第一个界面可以选择借书,还书,读者维护,图书管理功能;第二个主要界面是进入读者维护界面,可以选择增加读者,更改姓名,查找等功能。
第三个界面体现图书管理功能,可以添加图书,删除图书,查看所有图书等功能。
特点是设计过程思路清晰、模块划分简洁,设计各阶段分工明确。
经过实践证明,该划分是合理的,极大得提高了本系统的实现。
1.2 实验环境及实验语言实验环境Windows07 ,VS2008实验语言C++1.3 实验原理采用二进制文件进行存储以及数据的处理,使用了文件数据交互,通过二进制文件操作实现数据的写入与输出。
使用结构存储数据,使用类函数实现数据的操作。
类使用了三个类结构。
实用数组来对图书,姓名等信息的存储。
文本文件建立后将二进制文件内容读出后写入文本文件中。
二、系统设计2.1 类体系设计定义了3个类结构:1. class Reader 读者类,实现对读者的信息的描述2. class RDatabase 读者基本信息类实现建立读者的个人资料3. class Book 图书类,实现对图书的描述,图书的编号,书名,借出,还入等2.1.1 各类定义的基本功能,即主要属性(数据成员)和行为功能(函数)描述。
数据结构 实验报告

数据结构实验报告一、实验目的数据结构是计算机科学中非常重要的一门课程,通过本次实验,旨在加深对常见数据结构(如链表、栈、队列、树、图等)的理解和应用,提高编程能力和解决实际问题的能力。
二、实验环境本次实验使用的编程语言为C++,开发工具为Visual Studio 2019。
操作系统为 Windows 10。
三、实验内容1、链表的实现与操作创建一个单向链表,并实现插入、删除和遍历节点的功能。
对链表进行排序,如冒泡排序或插入排序。
2、栈和队列的应用用栈实现表达式求值,能够处理加、减、乘、除和括号。
利用队列实现银行排队系统的模拟,包括顾客的到达、服务和离开。
3、二叉树的遍历与操作构建一棵二叉树,并实现前序、中序和后序遍历。
进行二叉树的插入、删除节点操作。
4、图的表示与遍历用邻接矩阵和邻接表两种方式表示图。
实现图的深度优先遍历和广度优先遍历。
四、实验步骤及结果1、链表的实现与操作首先,定义了链表节点的结构体:```cppstruct ListNode {int data;ListNode next;ListNode(int x) : data(x), next(NULL) {}};```插入节点的函数:```cppvoid insertNode(ListNode& head, int val) {ListNode newNode = new ListNode(val);head = newNode;} else {ListNode curr = head;while (curr>next!= NULL) {curr = curr>next;}curr>next = newNode;}}```删除节点的函数:```cppvoid deleteNode(ListNode& head, int val) {if (head == NULL) {return;}ListNode temp = head;head = head>next;delete temp;return;}ListNode curr = head;while (curr>next!= NULL && curr>next>data!= val) {curr = curr>next;}if (curr>next!= NULL) {ListNode temp = curr>next;curr>next = curr>next>next;delete temp;}}```遍历链表的函数:```cppvoid traverseList(ListNode head) {ListNode curr = head;while (curr!= NULL) {std::cout << curr>data <<"";curr = curr>next;}std::cout << std::endl;}```对链表进行冒泡排序的函数:```cppvoid bubbleSortList(ListNode& head) {if (head == NULL || head>next == NULL) {return;}bool swapped;ListNode ptr1;ListNode lptr = NULL;do {swapped = false;ptr1 = head;while (ptr1->next!= lptr) {if (ptr1->data > ptr1->next>data) {int temp = ptr1->data;ptr1->data = ptr1->next>data;ptr1->next>data = temp;swapped = true;}ptr1 = ptr1->next;}lptr = ptr1;} while (swapped);}```测试结果:创建了一个包含 5、3、8、1、4 的链表,经过排序后,输出为 1 3 4 5 8 。
数据结构大作业实验报告要求范文

浙江工商大学计算机与信息工程学院数据结构实验大作业报告专业:班级:学号:姓名:指导教师:年月一、大作业报告内容包括以下几个部分⒈问题描述:(题目)⒉设计:⑴数据结构设计和核心算法设计描述;⑵主控及功能模块层次结构;⑶主要功能模块的输入、处理(算法框架描述)和输出;⑷功能模块之间的调用与被调用关系等。
⒊测试:测试范例,测试结果,测试结果的分析与讨论,测试过程中遇到的主要问题及所采用的解决措施。
⒋使用说明和作业小结:⑴使用说明主要描述如何使用你的程序以及使用时的主要事项;⑵在小结中说明程序的改进思想、经验和体会;⒌整理一份程序清单及运行示例的结果。
将以上各项文字材料及程序清单等装订成册,形成一个完整的报告。
题目从以下题目中任选一个,每人1个题目。
(一)试设计一个航空客运定票系统。
基本要求如下:1、每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。
2、系统能实现的操作和功能如下:1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少余订票额,则需重新询问客户要求。
若需要,可登记排队候补;3)承办退票业务:根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。
3、实现提示:两个客户名单可分别由线性表和队列实现。
为查找方便,已订票客户的线性表应按客户姓名有序,并且,为了插入和删除方便,应以链表作为存储结构。
由于预约人数无法预计,队列也应以链表作为存储结构。
数据结构课程设计大作业

课程设计(数据结构)一、题目的目的和要求1.设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。
(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
2.设计题目要求设计内容:本系统应完成以下几方面的功能:学生信息的建立:create();学生信息的插入:insert();学生信息的查询:search();学生信息的修改:change();学生信息的删除:delete();学生信息的输出:print()。
设计要求:(1)每条记录至少包含:姓名(name )、(xuehao),(kemu),(chengji)属性。
(2)作为一个完整的系统,应具有友好的界面和较强的容错能力(3)程序能正常运行,并写出课程设计报告二、设计进度及完成情况三、主要参考文献及资料[1] 叶核亚编著. 数据结构(Java版)(第3版). 北京:电子工业出版社,2011[2] 施平安等译. JAVA程序设计教程(第5版). 北京:清华大学出版社,2007[3] Java相关资料四、成绩评定设计成绩:(教师填写)指导老师:(签字)目录第一章系统概述 (1)第二章系统分析 (1)第三章系统设计 (1)第四章系统实现 (10)第五章系统运行与测试 (11)第六章总结与心得 .............................................. 错误!未定义书签。
参考文献 ................................................................ 错误!未定义书签。
第一章系统概述在这次的课程设计中我们选择的题目是:学生信息系统,能够添加、删除、查询联系人等。
由于自己的知识有限,程序可能不是太完美,但是我会认真对待,尽自己最大女里去完成此次任务!!!第二章系统分析学生信息系统主要用于帮助用户保存学生信息,方便用户查询联系人的相关信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构大作业报告
数据结构大作业实验报告课程名称:数据结构设计题目:客户去银行储蓄模拟程序一( 实验题目
(1)内容描述:编写一个程序反映客户到银行储蓄的过程。
(2)基本要求:要实现以下功能:1:排队 2:储蓄 3:查看排队4.:删除自己所排的队 5.不再排队,剩下的客户依次储蓄 6:下班
二( 实验的工程组成图和程序结构图
main
bank
本工程的组成结构如左图所示,程序结构图如右图所示。
三( 工程所包含的函数的功能描述
Bank():模拟客户到银行去储蓄的过程。
客户排队储蓄,所以要用到一个队列,
这里设计了一个不带头结点的单链表作为队列。
四( 实验工程的算法描述及流程图
//客户排队去银行储蓄,用到了队列的知识,这里设计了一个不带头结点的单链表作为队列来完成排队储蓄过程
#include <stdio.h>
#include <malloc.h>
typedef struct qnode
{
int data;
struct qnode *next;
} QNode; //定义链队结点类型
typedef struct
{
QNode *front,*rear; } QType; //定义链队类型
void bank() //模拟客户储蓄的过程
{
int cho,onwork=1,no,find;
QType *q; //定义链队类型的指针
QNode *p,*r; //定义链队结点的指针
q=(QType *)malloc(sizeof(QType)); //申请链队的空间
q->front=q->rear=NULL; //创建空队
while (onwork==1) //循环执行
{
printf("1:排队 2:储蓄 3:查看排队4:删除自己所排的队 5:不再排队,剩下的客户依次储蓄 6:下班请选择:");
scanf("%d",&cho);
switch(cho)
{
case 1://排队
printf(" ******输入排队序列号:");
do
{
scanf("%d",&no);
find=0;
p=q->front; //p指向第一个客户
while (p!=NULL && !find) //在p不为空&find==0即没找到时{ 执行此循环
if (p->data==no)
find=1;
else
p=p->next;
}
if (find) //若find==1即找到时
printf(" ******输入的排队序列号重复,重新输入:");
} while (find==1); //在find==0即没找到时结束循环
p=(QNode *)malloc(sizeof(QNode)); //申请空间,创建结点p->data=no;p->next=NULL;
if (q->rear==NULL) //第一个客户排队
{
q->front=q->rear=p;
}
else
{
q->rear->next=p;//原来最后一个元素指向新入队的元素
q->rear=p; //修改队尾指针,使其指向当前最后一个元素,即将*p结点入队}
break;
case 2://储蓄
if (q->front==NULL) //队空
printf(" ******没有排队的客户!\n");
else //队不空
{
p=q->front; //p指向第一个客户
printf(" ******客户%d储蓄\n",p->data);
if (q->rear==p) //只有一个客户排队的情况
{
q->front=q->rear=NULL;
}
else
q->front=p->next; //使p的下一个结点变成第一个客户
free(p); //释放p的空间
}
break;
case 3:// 查看排队
if (q->front==NULL) //队空
printf(" ******没有排列的客户!\n");
else //队不空
{
p=q->front; //p指向第一个客户
printf(" ******排队客户:");
while (p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
break;
case 4:// 删除自己所排的队
if (q->front==NULL) //队空
printf(" ******没有排列的客户!\n");
else //队不空
{ printf(" ******输入要删除的排队序列号:"); scanf("%d",&no);
find=0;
p=q->front; //p指向第一个客户
while (p!=NULL && !find) //在p不为空&find==0即没找到时执行此循环
{
if (p->data==no)
{
find=1; //找到要删除的序列号
printf(" ******客户%d删除\n",p->data);
if (q->front==p) //删除的正好是第一个客户的情况
{
q->front=p->next; //使p的下一个结点变成第一个客户
free(p);
}
else if(p->next==NULL) //删除的正好是最后一个客户的情况{
r->next=NULL; //r是p前一个结点
free(p);
}
else
{
r->next=p->next;
free(p);
}
}
else
{
r=p;
p=p->next;
}
}
}
break;
case 5:// 不再排队,剩下的客户依次储蓄
if (q->front==NULL) //队空
printf(" ******没有排列的客户!\n");
else //队不空
{
p=q->front; //p指向第一个客户
printf(" ******客户按以下顺序储蓄:"); while (p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
onwork=0; //退出
break;
case 6://下班
if (q->front!=NULL) //队不空
printf(" ******请排队的客户明天储蓄!\n"); onwork=0; //退出
break;
}
}
}
void main() //主程序
{
bank(); //函数调用
}
五( 实验结果(程序执行如下)
使用说明:
程序运行后,界面会跳出“1:排队 2:储蓄 3:查看排队4:删除自己所排的队 5:不再排队,剩下的客户依次储蓄 6:下班请选择:”的字样。
我们可根据需要,选择相应的选项。
1为排队,选1 后可将输入的序列号排入队中;2为储蓄,选2后排
在最前面的客户会进行储蓄,然后他的序列号从队列中删除;3为查看排队,选3
后会输出目前的所有客户的排队顺序;4为删除自己所排的队,选4后界面会跳出“输入要删除的排队序列号:”的字样,然后继续输入要删除的序列号,该序列号就会被删除;5为剩下的客户依次储蓄,选5 后系统会自动进行该任务;6为下班,选6后程序将会退出。
六、自己增加的部分(与源程序的不同)
这个程序中选项“4:删除自己所排的队”是我自己加上去的,程序也是我自己编写的。
起先一直有问题,不是第一个客户不能删除,就是最后一个客户不能删除。
不过我没有放弃,参看书本,查看资料,耐心研究,终于最后我把它做出来了。
七、总结与感想
这次数据结构的大作业,我做了一个模拟客户去银行储蓄的程序。
期间我遇到很多困难,尤其是自己编写其中的那段程序时,有好多次运行一直有问题。
但我没有灰心,一如既往地耐心探究,终于花了将近一周多的时间,我把它完成了。
这次大作业的完成使我更加深刻地认识到数据结构的奇妙。
就这么几行代码,有机地组合起来就能完成一个看似不可能的任务。
数据结构是一门神奇的科目,虽然它蕴藏了许多知识,但是我相信只要我们静下心来好好去学,我们都能把它学好。