实验1线性结构

上传人:大米 文档编号:557883973 上传时间:2022-07-30 格式:DOC 页数:19 大小:408KB
返回 下载 相关 举报
实验1线性结构_第1页
第1页 / 共19页
实验1线性结构_第2页
第2页 / 共19页
实验1线性结构_第3页
第3页 / 共19页
实验1线性结构_第4页
第4页 / 共19页
实验1线性结构_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《实验1线性结构》由会员分享,可在线阅读,更多相关《实验1线性结构(19页珍藏版)》请在金锄头文库上搜索。

1、实验项目名称: 线性结构 实验学时: 8 同组学生姓名: 孙沛 实验地点: 1314 实验日期: 2018.11.8 实验成绩: 批改教师: 批改时间: 实验一 线性结构一、实验目的和要求1、实验目的(1) 掌握顺序表的定位、插入、删除等操作。(2) 掌握单链表的定位、插入、删除等操作。(3) 掌握应用栈解决问题的方法;掌握利用栈进行表达式求解的算法;掌握队列的存储结构及基本操作实现,并能在相应的应用问题中正确选用它们。(4) 掌握串的存储及应用。2、实验要求(1) 注意链表的空间是动态分配的,某结点不用之后要及时进行物理删除,以便释放其内存空间。(2) 链表不能实现直接定位,一定注意指针的保

2、存,防止丢失。二、实验仪器和设备Visual C+ 6.0三、实验内容与过程(含程序清单及流程图)(一)顺序表1、必做题(1) 编写程序建立一个顺序表,并逐个输出顺序表中所有数据元素的值。编写主函数测试结果。(2) 编写顺序表定位操作子函数,在顺序表中查找是否存在数据元素x。如果存在,返回顺序表中和x值相等的第1个数据元素的序号(序号从0开始编号);如果不存在,返回1。编写主函数测试结果。(3) 在递增有序的顺序表中插入一个新结点x,保持顺序表的有序性。解题思路:首先查找插入的位置,再移位,最后进行插入操作;从第一个元素开始找到第一个大于该新结点值x的元素位置i即为插入位置;然后将从表尾开始依

3、次将元素后移一个位置直至元素i;最后将新结点x插入到i位置。(4) 删除顺序表中所有等于x的数据元素。2、选做题:已知两个顺序表A和B按元素值递增有序排列,要求写一算法实现将A和B归并成一个按元素值递减有序排列的顺序表(允许表中含有值相同的元素)。(二)单链表1、必做题(1) 编写程序建立一个单链表,并逐个输出单链表中所有数据元素。(2) 在递增有序的单链表中插入一个新结点x,保持单链表的有序性。解题思路:首先查找插入的位置然后进行插入操作;从第一个结点开始找到第一个大于该新结点值的结点即为插入位置;然后在找到的此结点之前插入新结点;注意保留插入位置之前结点的指针才能完成插入操作。(3) 编写

4、实现带头结点单链表就地逆置的子函数,并编写主函数测试结果。2、选做题:已知指针LA和LB分别指向两个无头结点单链表的首元结点。要求编一算法实现,从表LA中删除自第i个元素起共len个元素后,将它们插入到表LB中第j个元素之前。(三)栈和队列1、必做题(1) 判断一个算术表达式中开括号和闭括号是否配对。(2) 测试“汉诺塔”问题。(3) 假设称正读和反读都相同的字符序列为”回文”,试写一个算法判别读入的一个以为结束符的字符序列是否是“回文”。2、选做题:在顺序存储结构上实现输出受限的双端循环队列的入列和出列算法。设每个元素表示一个待处理的作业,元素值表示作业的预计时间。入队列采取简化的短作业优先

5、原则,若一个新提交的作业的预计执行时间小于队头和队尾作业的平均时间,则插入在队头,否则插入在队尾。(四)串1、必做题(1) 编写输出字符串s中值等于字符ch的第一个字符的函数,并用主函数测试结果。(2) 编写输出字符串s中值等于字符ch的所有字符的函数,并用主函数测试结果。解题思路:可以将第一题程序改进成一个子函数,在本题中循环调用。(3) 设字符串采用单字符的链式存储结构,编程删除串s从位置i开始长度为k的子串。2、选做题:假设以链结构表示串,编写算法实现将串S插入到串T中某个字符之后,若串T中不存在这个字符,则将串S联接在串T的末尾。提示:为提高程序的通用性,插入位置字符应设计为从键盘输入

6、。程序清单:(一)顺序表(1) 编写程序建立一个顺序表,并逐个输出顺序表中所有数据元素的值。编写主函数测试结果。#includetypedef int datatype;#define maxsize 1024typedef structdatatype datamaxsize;int last;sequenlist;int main()sequenlist L;int i,n;printf(请输入元素个数:);scanf(%d,&n);printf(n请输入元素:);for(i=0;in;i+)scanf(%d,&L.datai);printf( 元素输出:);for(i=0;in;i+)p

7、rintf(%dt,L.datai);printf(n);(2) 编写顺序表定位操作子函数,在顺序表中查找是否存在数据元素x。如果存在,返回顺序表中和x值相等的第1个数据元素的序号(序号从0开始编号);如果不存在,返回1。编写主函数测试结果。(2)#includetypedef int datatype;#define maxsize 1024typedef struct datatype datamaxsize;int last;sequenlist; int fun(sequenlist L,int x,int n) int i;for(i=0;in;i+)if(L.datai=x)ret

8、urn i;return -1; int main() sequenlist L; int i,n,y; int x; printf(输入元素个数:);scanf(%d,&n);for(i=0;in;i+)scanf(%d,&L.datai);printf(n 输入查找元素:); scanf(%d,&x);y=fun(L,x,n);if(y=-1)printf(n数据元素%d位置为-1 n,x);elseprintf(n 数据元素%d位置为%dn,x,y); (3) 在递增有序的顺序表中插入一个新结点x,保持顺序表的有序性。#include#define maxsize 100typedef

9、struct int datamaxsize;int last;sequenlist; main() int i,x,j; sequenlist l=11,12,14,15,16,17,18,6; printf(原数据为: ); for(i=0;i=l.last;i+) printf(%2d,l.datai); printf(n插入元素为:); scanf(%d,&x); for(i=1;ix)break; if(il.last) l.datal.last+1=x; else for(j=l.last;j=i-1;j-) l.dataj+1=l.dataj; l.datai-1=x; l.la

10、st+; printf(n插入后数据为:n); for(j=0;j=l.last;j+) printf(%3d,l.dataj); printf(n); return 0; (4) 删除顺序表中所有等于x的数据元素。#include#define maxsize 100typedef struct int datamaxsize;int last;sequenlist;main()int i,j,x=0,k=0;sequenlist L=1,3,5,7,2,4,6,8,2,9,9;printf(n原数据:);for(i=0;i=L.last;i+)printf(%3d,L.datai);pri

11、ntf(n删除元素:);scanf(%d,&x);for(i=1;i=L.last+1;i+)if(L.datai-1=x)for(j=i;j=L.last+1;j+)L.dataj-1=L.dataj;L.last-;i-;k=1;if(k=1)printf(删除后元素为:n);for(j=0;j=L.last;j+)printf(%3d,L.dataj);else printf(Not found!n);printf(n);(二)单链表1、必做题(1) 编写程序建立一个单链表,并逐个输出单链表中所有数据元素。#include#includetypedef int datattype;typ

12、edef struct nodechar data;struct node *next;linklist; main()char ch;linklist *head,*s,*r,*p;head=(linklist*)malloc(sizeof(linklist);r=head;scanf(%c,&ch);while(ch!=$)s=(linklist*)malloc(sizeof(linklist);s-data=ch;r-next=s;r=s;scanf(%c,&ch);r-next=NULL;r=head-next;while(r!=NULL)printf(%c,r-data);r=r-n

13、ext;(2) 在递增有序的单链表中插入一个新结点x,保持单链表的有序性。#include#includetypedef int datattype;typedef struct nodeint data;struct node *next;linklist;main()int x,y;linklist *head ,*s,*r,*p,*q,*m,*n;head=(linklist*)malloc(sizeof(linklist);r=head;printf(输入:);scanf(%d,&x);while(x!=0)s=(linklist*)malloc(sizeof(linklist);s-data=x;r-next=s;r=s;scanf(

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号