数据结构上机操作实验报告
上机实验报告(精选11篇)

上机实验报告篇1用户名se××××学号姓名学院①实验名称:②实验目的:③算法描述(可用文字描述,也可用流程图):④源代码:(.c的文件)⑤用户屏幕(即程序运行时出现在机器上的画面):2.对c文件的要求:程序应具有以下特点:a可读性:有注释。
b交互性:有输入提示。
c结构化程序设计风格:分层缩进、隔行书写。
3.上交时间:12月26日下午1点-6点,工程设计中心三楼教学组。
请注意:过时不候哟!四、实验报告内容0.顺序表的插入。
1.顺序表的删除。
2.带头结点的单链表的\'插入。
3.带头结点的单链表的删除。
注意:1.每个人只需在实验报告中完成上述4个项目中的一个,具体安排为:将自己的序号对4求余,得到的数即为应完成的项目的序号。
例如:序号为85的同学,85%4=1,即在实验报告中应完成顺序表的删除。
2.实验报告中的源代码应是通过编译链接即可运行的。
3.提交到个人空间中的内容应是上机实验中的全部内容。
上机实验报告篇2一、《软件技术基础》上机实验内容1.顺序表的建立、插入、删除。
2.带头结点的单链表的建立(用尾插法)、插入、删除。
二、提交到个人10m硬盘空间的内容及截止时间1.分别建立二个文件夹,取名为顺序表和单链表。
2.在这二个文件夹中,分别存放上述二个实验的相关文件。
每个文件夹中应有三个文件(.c文件、.obj文件和.exe文件)。
3. 截止时间:12月28日(18周周日)晚上关机时为止,届时服务器将关闭。
三、实验报告要求及上交时间(用a4纸打印)1.格式:《计算机软件技术基础》上机实验报告用户名se××××学号姓名学院①实验名称:②实验目的:③算法描述(可用文字描述,也可用流程图):④源代码:(.c的文件)⑤用户屏幕(即程序运行时出现在机器上的画面):2.对c文件的要求:程序应具有以下特点:a 可读性:有注释。
b 交互性:有输入提示。
东华大学数据结构上机实验报告

东华大学信息科学与技术学院实验报告实验名称:线性表的基本操作指导教师:学生姓名:学生学号:实验日期:2012/11一、实验目的1、熟悉C或VC++语言上机环境。
2、会定义线性表的顺序存储结构和链式存储结构。
3、熟悉顺序表和单链表的一些基本操作和应用。
4、加深对线性表的理解,逐步培养解决实际问题的编程能力。
二、实验环境运行C或VC++的微机。
三、实验内容:分别使用顺序表和单链表存储结构实现以下操作:1.建立线性表L={12,13,21,24,28,31,42,77};2.在第5个元素之前插入26;3.删除第5个元素28;4.查找28。
四、实验设计思路及算法流程(一)使用顺序表实现操作:建立顺序表,完成顺序表的基本操作:初始化、插入、删除、输出、查找元素、判线性表是否为空;问题分析:利用顺序表,设计一组输入数据,能够对顺序表进行如下操作:创建一个新的顺序表,实现动态空间分配的初始化;已给定的值插入到指定位置和删除指定位置的值,形成有序顺序表;按值查找,根据给定数据元素的值,查找该元素的位置,对查找结果进行返回;实现顺序表的各个元素的输出;“初始化算法”的操作结果:构造一个空的顺序线性表,对顺序表的空间进行动态管理,实现动态分配、回收和增加存储空间;“位置插入算法”的初始条件:顺序线性表L已存在,给定的元素位置为i,且1≤i≤ListLength(L)+1 ;其操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1;“位置删除算法”的初始条件:顺序线性表L已存在,1≤i≤ListLength(L) ;其操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1 ;“输出算法”的初始条件:顺序线性表L已存在;其操作结果:依次对L的每个数据元素进行输出;“按值查找算法”初始条件:顺序线性表L已存在,元素值为e;其操作结果:返回L 中数据元素值为e的元素位置;线性表的顺序存储结构的定义及其基本操作的参考程序(顺序表)文件一:pubuse. h 是公共使用的常量定义和系统函数调用声明。
数据结构上机实验报告

else insert(lc,i/2,la.list[i]); //偶数位次元素插入lc
}
printf("\n您输入的线性表元素为:\n\n");
print(la);
printf("线性表的奇数位次的元素为:\n\n");
print(lb);
printf("线性表的偶数位次的元素为:\n\n");
print(lc);
}
void initial(sqlist &v)
{printf(" ****本程序可以实现线性表奇偶位序的元素分别输出****\n\n\n");
int i,a;
printf("请输入一个偶数作为线性表的长度:\n\n");
void initlist(sqlist &);
void print(sqlist); //输出线性表
void main()
{printf(" *****************本程序可以实现线性表的复制******************\n");
sqlist la,lb; //声明线性表
initial(la);
【程序设计细想】:
建立三个线性表la,lb,lc,对线性表la进行输入,然后利用循环结构对la中奇数位序的元素对lb进行插入操作,对偶数位序的元素对lc进行插入操作,从而得到线性表lb和lc。
【程序代码】:
#include<stdio.h>
#include<malloc.h>
数据结构集中上机实验报告

XX大学信息与计算科学专业2008级《数据结构》集中上机设计题目:迷宫求解(非递归求解)设计时间:2010-2011学年第一学期目录一、实验内容 (2)二、需求分析 (2)三、总体设计 (2)(一)存储结构 (2)(二)流程图 (3)四、详细设计 (3)(一)基本算法解析 (3)(二)为实现算法,需要的象的数据类型 (4)(三)函数的调用关系 (5)(四)算法时间、空间复杂度 (5)五、代码 (5)六、运行结果分析 (10)(一)迷宫路径探索成功 (10)(二)迷宫路径未找到的情况 (13)(三)程序的优缺点与改进 (13)七、参考文献 (14)八、心得体会 (14)一、实验内容任务:可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出。
二、需求分析1、可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出;要求使用非递归算法。
2、用户可以根据自己的需求进行输入所需的迷宫,其中1表示迷宫的墙壁,0表示迷宫的通路,从而建立迷宫。
3、可以自行输入迷宫的入口和出口坐标。
4、程序执行的命令包括:(1)构造栈函数。
其中包括了构造空栈InitStack;压入新数据元素Push;栈顶元素出栈Pop。
(2)构造求迷宫路径函数。
其中定义了二维数组maze[M][N]存取迷宫数据;输出找到的通路MazePath。
(3)建立一个迷宫initmaze。
其中包括输入迷宫行数列数以及各行各列;加一圈围墙并输出迷宫。
三、总体设计(一)存储结构:首先用二维数组存储迷宫数据,迷宫数据由用户输入。
一个以链表结构作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。
求得的通路以三元组(i,j,d)形式输出,其中(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向(东南西北所用代表数字,自行定义)。
1.从入口出发,顺着某一个方向进行探索,若能走通,继续往前走,否则沿原路退回,换一个方向继续探索,直至出口位置,求得一条通路。
数据结构上机报告

数据结构上机报告班级:通信工程1405 姓名:李笑阳学号:U201413536一.约瑟夫环1.需求分析①.约瑟夫问题的一种描述是:编号为1,2,……,n点的n个人按顺时针方向围坐一个圈,每人持有一个密码。
一开始选一个正整数作为报数上限值m,从第一个人开始从顺时针方向自1开始报数,报到m时停止。
报到m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始从新从1报数,如此下去,直达所有人出列。
②.基本要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各人的编号。
③.演示程序提示用户输入其总人数,然后依此输入每个人的数字,程序按照出列的顺序输出各人的编号。
测试数据:m的初始值为20;n=7,7个人的密码依次是3,1,7,2,4,8,4,首先m 的值为6(正确的出列顺序为6,1,4,7,2,3,5)2.设计概要①循环链表的结点类型定义typedef struct LNode②.创建链表模块LinkList creatList_L(int n)③.删除链表并释放空间模块void ListDelete_L(LinkList L,int key,int n)④.主函数模块(约瑟夫环的实现)Void main()3.具体代码实现#include<stdio.h>#include<malloc.h>//定义结构体typedef struct LNode{int password,num;struct LNode *next;}LNode,*LinkList;//创建链表LinkList creatList_L(int n){LinkList p,head,q;int i=1,key;head=(LinkList)malloc(sizeof(LNode));p=head;for(i=1;i<=n;i++) //进入循环赋值{scanf("%d",&key);q=p;p=(LinkList)malloc(sizeof(LNode));p->num=i;p->password=key;q->next=p;}p->next=head->next;free(head); ////现在的p节点是列表的尾节点把尾节点的下一个指向头结点//也就是形成了一个环head=p->next;return (head);}//输出并删除列表void ListDelete_L(LinkList L,int key,int n){LinkList p,s;int j=1;while(n>0){p=L;//key是人数上限M==key 现在开始循环叫数叫到M的输出//并从循环链表中删除for(j=1;j<key;j++){s=p;p=p->next;}printf("%2d %5d\n",p->num,p->password);key=p->password;//s是p的上一个节点,现在把s的下一个节点指向p的下一个s->next=p->next;L=p->next;//释放p节点free(p);//链表总数减一,一直到n==0时退出while循环n--;}}void main(){LinkList s;int n,m;printf("请输入总人数N和上限数M:");scanf("%d%d",&n,&m);printf("请输入%d个人的密码:",n);s=creatList_L(n); //调用创建列表printf("序号密码\n");ListDelete_L(s,m,n); //调用输出并删除列表}4.运行分析①.运行结果②.复杂度的分析时间复杂度为O(n2),空间复杂度为O(n)5.实验总结这个算法中的主函数只完成输入输出,其他都是通过调用完成。
数据结构上机实验报告

数据结构上机实验报告学院:电子工程学院专业:信息对抗技术姓名:学号:教师:饶鲜日期:目录实验一线性表 ........................................................................................................ - 4 -一、实验目的.................................................................................................... - 4 -二、实验代码.................................................................................................... - 4 -三、实验结果.................................................................................................. - 14 -四、个人思路.................................................................................................. - 15 - 实验二栈和队列 .................................................................................................. - 15 -一、实验目的.................................................................................................. - 15 -二、实验代码.................................................................................................. - 16 -三、实验结果.................................................................................................. - 24 -四、个人思路.................................................................................................. - 25 - 实验三数组 .......................................................................................................... - 26 -一、实验目的.................................................................................................. - 26 -二、实验代码.................................................................................................. - 26 -三、实验结果.................................................................................................. - 28 -四、个人思路.................................................................................................. - 28 - 实验四树 .............................................................................................................. - 29 -一、实验目的.................................................................................................. - 29 -二、实验代码.................................................................................................. - 29 -三、实验结果.................................................................................................. - 39 -四、个人思路.................................................................................................. - 39 -实验一线性表一、实验目的1.熟悉线性表的顺序和链式存储结构2.掌握线性表的基本运算3.能够利用线性表的基本运算完成线性表应用的运算二、实验代码1.设有一个线性表E={e1, e2, … , e n-1, e n},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ e n, e n-1 , … , e2 , e1 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。
数据结构栈和队列上机报告

数据结构栈和队列一上机的目的和要求实验目的:1.掌握实现栈/队列的基本操作方法2.掌握栈的基本操作:建栈,Push,Pop等运算在顺序存储上的实现3.掌握队列的基本操作:建队列,入队,出队等运算在顺序存储结构上的实现队列的实验参照栈编程实现。
实验报告要求:1. 上机前完成所有的函数编写2.实验记录部分填写编写主函数调用所写所有函数的屏幕输出3.实验总结部分填写对该次实验所编写函数的运行情况,和在实验过程中对栈的认识和实现情况二基本知识和原理栈和队列是两种常用的数据结构,栈和队列是操作受限的线性表,栈和队列的数据元素具有单一的前驱和后继的线性关系;栈和队列又是两种重要的抽象数据类型。
栈是限定在表尾进行插入和删除操作的线性表允许插入和删除的一端为栈顶,另一端为栈底,出栈元素只能是栈顶元素,后进先出,相邻元素具有前驱与后继关系。
队列是只允许在一端进行插入操作,在另一端进行删除操作的线性表。
允许插入的一端为队尾,允许删除的一端为队头,先进先出,相邻元素具有前驱与后继关系。
三程序算法分析及实现代码#include"stdio.h"#include"conio.h"#define MaxSize 100 /*栈中的元素的最大个数*/typedef int ElemType;typedef struct{ElemType data[MaxSize];/*存放堆栈的数组*/int top;/*栈顶元素*/}Stack,*S;/*堆栈的初始化*/void InitStack(Stack *S){/*指向的是最顶端的元素取值范围为从0~MaxSize-1为-1时说明为空栈*/S->top=-1;}int StackEmpty(SqStack *s) //判断是否为空{if(s->top==s->base){return TRUE;}else{return 0;}}int GetTop(SqStack* s,int *e) //取栈顶{//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERRORif(s->top==s->base){return ERROR;}*e=*(s->top-1);return 1;}int Push(SqStack *s,int e) //进栈{//插入元素e为新的栈顶元素if(s->top-s->base>=s->stacksize){//栈满,追加存储空间s->base=(int *)malloc(SIZE*sizeof(int));if(!s->base)exit(OVERFLOW);s->top=s->base + s->stacksize;s->stacksize +=SIZE;}*(s->top)++=e;return 1;}int Pop(SqStack *s ,int *e)//出栈{// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERRORif(s->base == s->top)return ERROR;*e = *--s->top;return 1;}int main ( ){SqStack sq;InitStack(&sq);int e;int N;int k;int n=0;Z:{printf("\n\t********************************************");printf("\n\t*** 请你输入相应的操作序号进行操作 ***");printf("\n\t*** 1.是否空 ***");printf("\n\t*** 2.取栈顶元素 ***");printf("\n\t*** 3.进栈 ***");printf("\n\t*** 4.出栈 ***");printf("\n\t*** 0. 退出 ***\n");printf("\t********************************************");printf("\n请选择功能:");scanf("%d",&k);switch(k){case 1:if(StackEmpty(&sq)){printf("该栈为空!");}else{printf("该栈非空!");}goto Z;break;case 2:GetTop(&sq, &e);printf("栈顶元素为:%d", e);goto Z;break;case 3:printf("请输入要进栈的元素:");scanf("%d", &e);Push(&sq, e);goto Z;break;case 4:Pop(&sq,&e);printf("%d", e);goto Z;break;case 0:exit(0);break;default:break;}}}二队列#include<iostream>#include<malloc.h>using namespace std;#define TRUE 1#define FLASE 0#define OK 1typedef struct QNode {char data;struct QNode *next;}QNode, *Queue;typedef struct {Queue front;Queue rear;}LinkQueue;void InitQueue(LinkQueue &Q)//创造空队{Q.front = Q.rear = (Queue)malloc(sizeof(QNode));if (!Q.front){printf("OVERFLOW" );}Q.front->next = NULL;// return OK;}void EnQueue(LinkQueue &Q, int e)//入队{Queue p = (Queue)malloc(sizeof(QNode));p->data = e;p->next = NULL;Q.rear->next = p;Q.rear = p;//return OK;}void DeQueue(LinkQueue &Q, int e)//出队{Queue p = (Queue)malloc(sizeof(QNode));if (Q.front == Q.rear){p rintf("队空");}p = Q.front->next;e = p->data;Q.front->next = p->next;if (Q.rear == p)Q.rear = Q.front;free(p);printf( " 元素已经出队");}int length(LinkQueue &Q)//求队列中元素个数{Queue p = (Queue)malloc(sizeof(QNode));p = Q.front->next;int i = 0;while (p != NULL){p = p->next;i++;}printf("队列中元素个数: ");printf(”%d”,i );return 1;}int QueueEmpty(LinkQueue &Q)//判队列空{if (Q.front == Q.rear)return TRUE;elsereturn FLASE;}int main(){LinkQueue Q;int k;Z:{printf(" \n\t********************************************");printf( "\n\t*** 请你输入相应的操作序号进行操作 ***");printf( "\n\t*** 1.初始化 ***");printf( "\n\t*** 2.入队 ***");printf( "\n\t*** 3.出队 ***");printf( "\n\t*** 4.求队列中元素个数 ***");printf( "\n\t*** 5.判队列是否为空 ***");printf( "\n\t********************************************");printf( "\n请选择功能:");cin >> k;switch (k){case 1:InitQueue(Q);goto Z;break;case 2:printf("请输入要插入的元素");int e;cin >> e;EnQueue(Q, e);goto Z;break;case 3:printf( "出队");int m;DeQueue(Q, m);goto Z;break;case 4:length(Q);goto Z;break;case 5:if (QueueEmpty(Q))printf("队列为空");elseprintf("队列不为空");goto Z;break;default:break;}}}四结果分析及测试相关记录队列入队求队列中元素个数出队列判断是否为空五实验体会和学习感悟学习完队列和栈一章后对其操作还有基本函数的运用有了基本的了解。
数据结构上机实习报告

上机实习报告班号:116112姓名:**学号:***********实习报告【实习一】线性表及其应用n(n>20)的阶乘【问题描述】大数运算——计算n的阶乘(n>=20)。
【基本要求】(1)数据的表示和存储:(1.1)累积运算的中间结果和最终的计算结果的数据类型要求是整型——这是问题本身的要求;(1.2)试设计合适的存储结构,要求每个元素或结点最多存储数据的3位数值。
(2)数据的操作及其实现:基于设计的存储结构实现乘法操作,要求从键盘上输入n值,在屏幕上显示最终计算结果。
【问题分析】(1)设计数据的存储结构:介于乘运算的精确性以及实型数据表示的不精确性,本题不能采用实型表示累积运算的中间结果和最终的计算结果,而只能用整型。
然而由于普通整型和长整型所能表述数的范围受其字长的限制,不能表示大数阶乘的累积结果,故必须设计一个合适的数据结构实现对数据的存储,例如可以让每个元素或结点存储数据的若干位数值。
从问题描述不难看出n值为任意值,故为使程序尽量不受限制,应采用动态存储结构。
累积运算的特点是当前的计算结果是下次乘法运算的乘数。
实现两个数的乘法运算须考虑:(1)乘数的各位数都要与被乘数进行乘法运算;(2)乘法过程中的进位问题及其实现;(3)因每个元素或结点最多存储数据的3位数值,故当元素或结点中的数值大于999,需向前一个元素或结点进位。
综合以上几点,我采用了单链表的储存结构形式。
(2)阶乘算法的实现:1. 链表型数据乘法的具体实现描述:(1)初始算法顺序访问对每个节点上的数据乘以要乘的数后在顺序访问查看是否需要进位,大于999则向前进位,如果前面没有节点则添加新节点储存进位的数(2)改进算法将原始算法的乘操作和进位操作合在一起进行,提高程序效率.2. 数据输出算法具体实现描述从高位向低位顺序输出节点上储存的数据,注意补零,最高位的节点不补,其它节点要补。
对于最后的结果,因为我采用的是普通的单链表算法,因此我添加了一个逆置的算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一单链表的基本操作(必做)一、实验目的1.掌握单链表的存储、初始化、插入、删除等操作的程序实现。
2.加深对单链表基本概念,基本理论及相应算法的掌握与理解。
3.了解链表的处理方式,学习体会简单的单链表程序实现相关知识。
二、实验内容1.建立一个链表、设计链表的基本操作实现算法、输出一个链表表,调试并输出结果。
2.编写一个程序实现如下功能:让计算机产生出50个0~9之间的随机数并依次保存到单链表中;输出遍历单链表;从单链表中删除与给定值相等的所有结点;输出遍历单链表;输出单链表长度,调试并输出结果。
三、实验步骤1.定义一个链表结构体。
2.利用插入功能插入一个结点。
3.利用删除功能删除一个结点。
四、程序运行测试1.利用插入功能插入一个结点。
2.利用删除功能删除一个结点。
五、实验报告要求1.绘制链表操作实现的流程图。
2.详细给出程序运行测试结果(包括测试数据和测试结果)。
3.选试验步骤2-3中的任意一个,给出程序的详细注释。
4.参考程序中某一部分功能的改进(选做)5.实验心得与体会6.附录,实验用源程序六、参考源代码#include <iostream.h>#include <malloc.h>typedef struct LNode{int data;struct LNode *next;}Lnode, *LinkList;//假设下面的单链表均为带头结点。
void CreatLinkList(LinkList &L,int j){//建立一个单链表L,数据为整数,数据由键盘随机输入。
LinkList p,q;L=(LinkList )malloc(sizeof(Lnode));L->next=NULL;q=L;cout<<"在单链表内输入整数:"<<endl;for(int i=0;i<j;i++) p=(LinkList)malloc(sizeof(Lnode)); cin>>p->data;p->next=q->next;q->next=p;q=p; }int PrintLinkList(LinkList &L){//输出单链表L的数据元素LinkList p;p=L->next;if(L->next==NULL){cout<<"链表没有元素!"<<endl;return 0;}cout<<"单链表的数据元素为:";while(p){cout<<p->data<<" ";p=p->next;}cout<<endl;return 1;}void LinkListLengh(LinkList &L){//计算单链表L的数据元素个数。
int i=0;LinkList p;p=L->next;while(p){ i++;p=p->next; }cout<<"单链表的数据元素个数为:"<<i<<endl; }int InsertLinkList(LinkList &L, int i, int x) {//在单链表L的第I个元素前插入一个数据元素X。
LinkList p,s;int j=0;p=L;while(p&&j<i-1){p=p->next;++j;}if(!p||j>i-1){cout<<"插入元素的位置不合理!";return 0;}s=(LinkList)malloc(sizeof(LNode));s->data=x;s->next=p->next;p->next=s;return 1;}int DeleteLinkList(LinkList &L,int i){//删除单链表L的第I个数据元素。
LinkList p,q;int j=0;p=L;while(p->next&&j<i-1){p=p->next;++j;}if(!(p->next)||j>i-1){cout<<"删除元素的位置不合理!";return 0;}q=p->next;p->next=q->next;i=q->data;free(q);return 1;}void ClearLinkList(LinkList &L){//将单链表L置为空表。
L->next=NULL;}void DestroyLinkList(LinkList &L){//销毁单链表L。
LinkList p,q;p=L->next;while(L->next!=NULL){q=p->next;L->next=q;free(p);p=q;}free(L);cout<<"链表已经被销毁!"<<endl;}void main(){//调用上面的各函数,运行并检验程序是否正确。
LinkList L;int i,j,x;cout<<"---------------------------------------"<<endl;cout<<" 《单链表实验,按提示操作》"<<endl;cout<<"---------------------------------------"<<endl;cout<<"输入的元素的个数:";cin>>j;CreatLinkList(L,j);LinkListLengh(L);PrintLinkList(L);cout<<"在第几个元素前插入:";cin>>i;cout<<"输入插入的元素:";cin>>x;InsertLinkList(L,i,x);LinkListLengh(L);PrintLinkList(L);cout<<"输入删除元素的位置:";cin>>i;DeleteLinkList(L,i);LinkListLengh(L);PrintLinkList(L);ClearLinkList(L);cout<<"清空链表后:"<<endl;LinkListLengh(L);PrintLinkList(L);DestroyLinkList(L);}头文件h文件#include<iostream.h>#include<stdlib.h>typedef int ElemType; //规定元素类型为整struct LNode //定义单链表结构{ElemType data;LNode *next;}; //初始化单链表void InitList(LNode *& HL){HL=NULL; //将单链表置空}void InsertRear(LNode *&HL,const ElemType & item){LNode *newptr;newptr=new LNode; //为保存新元素分配动态结点, newptr指向这个结点。
if(newptr==NULL) //若未分配到结点,则停止插入,退出程序运行。
{cerr<<"Memory allocation failare!"<<endl;exit(1); }newptr->data=item; //把新元素赋给动态结点*newptr的值域newptr->next=NULL; //给动态结点的指针域置空if(HL==NULL)HL=newptr; //向空表插入的结点为表头结点else{LNode *p=HL;while(p->next!=NULL) //从表头开始遍历到最后一个结点为止p=p->next;p->next=newptr; //把新结点链接到表尾}}void TraverseList(LNode *&HL){ LNode *p=HL;while(p!=NULL){cout<<p->data<<" ";p=p->next; }cout<<endl;}int ListSize(LNode *&HL){ LNode *p=HL;int i=0; //用来统计结点的个数while(p!=NULL) //遍历单链表,统计结点数{ i++;p=p->next; }return i;}int Delete(LNode *&HL,const ElemType & item){if(HL==NULL){cerr<<"HL is NULL!"<<endl;return 0;}LNode *ap,*cp;ap=NULL;cp=HL;while(cp!=NULL)if(cp->data==item)break;else //使前驱指针和当前指针均指向下一个结点{ap=cp;cp=cp->next;}if(cp==NULL){cerr<<"Deleted element is not exist!"<<endl;return 0;}if(ap==NULL) //由cp指向的被删除结点是表头结点HL=HL->next;else //由cp指向被删除结点是非表头结点ap->next=cp->next;delete cp;return 1;}Cpp文件#include<iostream.h>#include<stdlib.h>typedef int ElemType; //规定元素类型为整#include "link.h" //此文件中保存有线性表操作在单链表(由动态独立节点构成)上的实现void main(){ //构成单链表LNode *head;InitList(head);int i,j;for(i=0;i<50;i++){ j=rand()%10;InsertRear(head,j);} //输出遍历单链表TraverseList(head);//从单链表中删除与键盘上输入的值相等的所有结点cout<<"输入一个0~10之间的一个整数:";cin>>j;while(Delete(head,j)){} //输出遍历单链表TraverseList(head); //输出单链表长度cout<<ListSize(head)<<endl;}实验二链表的应用—飞机票销售系统(选做)一、实验目的1.掌握单链表的存储。