




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一 线性表的基本操作一、实验目的与基本要求1掌握数据结构中的一些基本概念。数据、数据项、数据元素、数据类型和数 据结构,以及它们之间的关系。2了解数据的逻辑结构和数据的存储结构之间的区别与联系;数据的运算与数 据的逻辑结构的关系。3掌握顺序表和链表的基本操作:插入、删除、查找以及表的合并等运算。4掌握运用 C 语言上机调试线性表的基本方法。二、实验条件1硬件:一台微机2软件:操作系统和 C 语言系统三、实验方法确定存储结构后,上机调试实现线性表的基本运算。四、实验内容1建立顺序表,基本操作包括:初始化,建立一个顺序存储的链表,输出顺序 表,判断是否为空,取表中第 i 个元素,定位函数(返回
2、第一个与 x 相等的 元素位置),插入,删除。2建立单链表,基本操作包括:初始化,建立一个链式存储的链表,输出顺序 表,判断是否为空,取表中第 i 个元素,定位函数(返回第一个与 x 相等的 元素位置),插入,删除。3 假设有两个按数据元素值非递减有序排列的线性表A和B,均以顺序表作为存储结构。编写算法将 A表和B表归并成一个按元素值非递增有序(允许值 相同)排列的线性表C。(可以利用将B中元素插入A中,或新建C表)4.假设有两个按数据元素值非递减有序排列的线性表 A和B,均以单链表作为 存储结构。编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序, 允许值相同)排列的线性表 C。五
3、、附源程序及算法程序流程图1. 源程序(1)源程序 (实验要求 1和 3)#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef struct arrint * elem;int length;int listsize;出 nn);Sqlist;void menu();printf( 1.创建线性表 Lann);printf( 2. 判断 La 是否为空表 nn);printf( 3.插入元素 (La)nn);printf( 4.删除元素 (La)nn);printf( 5.定位元素 (La)nn);printf( 6.取元素 (La
4、)nn);printf( 7.输出线性表 nn);printf( 8.创建线性表 Lbnn);printf( 9. 归并为一个线性表 Lann);printf(*nn);/* 创建顺序线性表 L*/ void InitList(Sqlist *L)int n;int i=0;L-elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int); if(NULL=L-elem)printf( 储存分配失败 !n);elseL-length=0;L-listsize=LIST_INIT_SIZE;printf( 输入顺序表 a:n); scanf(%d,&n);while
5、(n)L-elemi=n;i+;L-length+;L-listsize=L-listsize-4; scanf(%d,&n);/* 输出顺序线性表 */ void ShowList(Sqlist *p)int i;if(0=p-length)printf( 数组为空 !n);elsefor(i=0;ilength;i+)printf(%d ,p-elemi);printf(n);/* 判断 L 是否为空表 */ void ListEmpty(Sqlist *p)if(0=p-length)printf(L是空表 !n);elseprintf(L不是空表 !n);i/* 在顺序线性表中第i 个
6、元素前插入新元素 e */void ListInsert(Sqlist *p,int i,int e)int *newbase;int *q1;int *q2;while(ip-length+1)n:);printf( 您输入的 i 超出范围 !n 请重新输入要插入的位置 scanf(%d,&i); if(p-length=p-listsize)newbase=(int *)realloc(p-elem,(p-listsize+LISTINCREMENT)*sizeof(int);if(!newbase)exit(0);else p-elem=newbase; p-listsize+=LIST
7、INCREMENT; q1=&(p-elemi-1); for(q2=&(p-elemp-length-1);q2=q1;-q2)*(q2+1)=*q2;*q1=e;+p-length;/*/在顺序线性表中删除第i个元素,并用e返回其值*/void ListDelete(Sqlist *p,int i,int &e)int *q1,*q2;while(ip-length) printf( 您输入的 i 超出范围 ! 请重新输入 :); scanf(%d,&i); q1=&(p-elemi-1); e=*q1;q2=p-elem+p-length-1; for(+q1;q1length;/* 对
8、比 a 与 b 相等 */ bool compare(int a,int b)if(a=b) return 1;else return 0;/* 在顺序线性表 L 中查找第 1 个值与 e 满足 compare()d 元素的位序 */ void LocateElem(Sqlist *L,int e)int i=1;int *p; p=L-elem; while(ilength & !compare(*p+,e) +i;if(ilength) printf( 第 1 个与 e 相等的元素的位序为 %dn,i);else printf( 没有该元素 !n);/* 用 e 返回 L 中第 i 个数据
9、元素的值 */ void GetList(Sqlist *p,int i,int &e)Sqlist *p1; p1=p; e=p1-elemi-1;/* 已知顺序线性表 La 和 Lb 是元素按值非递减排列 */* 把La和Lb归并到La上,La的元素也是按值非递减*/void MergeList_L(Sqlist *La,Sqlist *Lb)int i=0,j=0,k,t;int *newbase;Sqlist *pa,*pb;pa=La;pb=Lb;while(ilength & jlength)if(pa-elemi = pb-elemj)if(pa-listsize=0)newba
10、se=(int*)realloc(pa-elem,(pa-listsize+LISTINCREMENT)*sizeof(int); if(!newbase)exit(0);for(k=pa-length-1; k=i; k-) pa-elemk+1=pa-elemk;pa-length+;pa-elemi=pb-elemj;i+;j+;elsei+;while(jlength)if( pa-listsize length-j )newbase=(int*)realloc(pa-elem,(pa-listsize+LISTINCREMENT)*sizeof(int); if(!newbase)e
11、xit(0);for(j;jlength;j+,i+)pa-elemi=pb-elemj;pa-length+;for(i=0;ilength/2;i+)t=pa-elemi;pa-elemi=pa-elempa-length-i-1;pa-elempa-length-i-1=t;(2)源程序 (实验要求 2 和 4)typedef struct LNodeint data; struct LNode *next;LNode, *LinkList; void menu();LinkList InitList();void ShowList(LinkList L);void ListDelete
12、(LinkList L,int i,int &e);void ListEmpty(LinkList L);void GetList(LinkList L,int i,int &e);void ListInsert(LinkList L,int i,int e);bool compare(int a,int b);void LocateElem(LinkList L,int e);LinkList MergeList_L(LinkList La,LinkList Lb); int total=0;void main()LinkList La;LinkList Lb;La=(LinkList)ma
13、lloc(sizeof(struct LNode); La-next=NULL;Lb=(LinkList)malloc(sizeof(struct LNode); Lb-next=NULL;int n;int m;int x; menu();scanf(%d,&n); while(n)switch(n)case 0: ; break; case 1:La-next=InitList();break;case 2:ListEmpty(La);break;case 3:n);printf( 请输入要插入到第几个节点前 scanf(%d,&m);printf( 请输入插入的数据 :n); scanf
14、(%d,&x);ListInsert(La,m,x);break;case 4:printf( 请输入删除元素的位序 :n);scanf(%d,&m);ListDelete(La,m,x);printf( 删除的元素为 :%dn,x);break;case 5:printf( 请输入要找的与线性表中相等的数 :n); scanf(%d,&m);LocateElem(La,m);break;case 6:printf( 请输入查找的位序 :n);scanf(%d,&m);GetList(La,m,x);printf(La中第 d个元素的值为 dn,m,x);break;case 7:ShowLi
15、st(La);break;case 8:Lb-next=InitList();break;case 9:La=MergeList_L(La,Lb);printf( 归并成功 n);break;menu();scanf(%d,&n);void menu()printf(*nn);printf(0.退出 nn ”);printf(1.创建线性表 Lann);printf(2.判断是否为空表 nn);printf(3.插入元素 nn);printf(4.删除元素 nn);printf(5.定位元素 nn);printf(6.取元素 nn);printf(7.输出线性表 nn);printf(8.创建
16、线性表 Lbnn);printf(9.归并两线性表 nn);printf(*nn);程图(实验要求1和3)图1主函数流程图图2创建线性表La流程图图3判断La是否为空表流程图 图4插入元素(La)流程图 图5删除元素(La)流程图 图6定位元素(La)流程图图7取元素(La)流程图 图8输出线性表流程图 图9输出线性表流程图 流程图(实验要求2和4)开始图10主函数流程图图11创建线性表La流程图图12判断是否为空表流程图图13插入元素流程图 图14删除元素流程图图15定位元素流程图图图16取元素流程图图17创建Lb流程图 图18归并两表流程图六、运行结果1. ( 实验要求 1和 3) 点击运行,首先出现的是菜单界面,选择菜单选项进行操作,如图所示。按“ 1”回车后,即可以创建顺序表La,输入“0”结束添加,如图所示 输入 2,判断 La 是否为空表,如图所示。 输入 3,在指定的位序插入元素,如图所示
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO 4075:2025 EN Polysulfone (PSU) - Effect of time and temperature on expected strength
- 花画艺术在宠物用品设计的趣味性考核试卷
- 理论与实践相结合的公路工程复习策略试题及答案
- 数据中心网络架构试题及答案
- 矿物加工厂质量管理与质量控制考核试卷
- 金属工艺品的工艺研究与技术开发挑战应对策略考核试卷
- 纳米材料检测技术考核试卷
- 嵌入式产品开发过程中的法律问题试题及答案
- 行政组织理论中的领导者角色与权责文化试题及答案
- 金冶炼厂的碳排放减少与碳足迹管理考核试卷
- 《中国老年高血压管理指南(2023版)》解读
- 七年级下册《山地回忆》课件
- 浦东文员面试题及答案
- 腰椎病的康复护理
- 2024-2025学年度第二学期人教版八年级下册物理暑假作业含答案第一天
- 2024年中国甘脲行业调查报告
- 浙江省2025年中考第二次模拟考试英语试题(含答案无听力原文及音频)
- 初创公司薪酬方案
- 2025年大学期末民法试题及答案
- 《辅助生殖技术探究》课件
- 中医儿科学研究进展知到课后答案智慧树章节测试答案2025年春浙江中医药大学
评论
0/150
提交评论