




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验项目名称: 线性结构 实验学时: 8 同组学生姓名: 孙沛 实验地点: 1314 实验日期: 2018.10.18 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,保持单链表的有序性。解题思路:首先查找插入的位置然后进行插入操作;从第一个结点开始找到第一个大于该新结点值的结点即为插入位置;然后在找到的此结点之前插入新结点;注意保留插入位置之前结点的指针才能完成
4、插入操作。(3) 编写实现带头结点单链表就地逆置的子函数,并编写主函数测试结果。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) 编写程序建立一个顺序表,并逐个输出顺序表中所有数据元素的值。编写主函数测试结果。#include<stdio.h>typedef int datatype;#define maxsize 1024typedef structdatatype datamaxsize;int last;sequenlist;int main()sequenlist L;int i,n;printf("请输入元素个数:");scanf("%d",&n);printf("n请输入元素:"
7、;);for(i=0;i<n;i+)scanf("%d,",&L.datai);printf(" 元素输出:");for(i=0;i<n;i+)printf("%dt",L.datai);printf("n");(2) 编写顺序表定位操作子函数,在顺序表中查找是否存在数据元素x。如果存在,返回顺序表中和x值相等的第1个数据元素的序号(序号从0开始编号);如果不存在,返回1。编写主函数测试结果。(2)#include<stdio.h>typedef int datatype;#defi
8、ne maxsize 1024typedef struct datatype datamaxsize;int last;sequenlist; int fun(sequenlist L,int x,int n) int i;for(i=0;i<n;i+)if(L.datai=x)return i;return -1; int main() sequenlist L; int i,n,y; int x; printf("输入元素个数:");scanf("%d",&n);for(i=0;i<n;i+)scanf("%d,&quo
9、t;,&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<stdio.h>#define maxsize 100typedef struct int datamaxsize;int last;sequen
10、list; 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;i<=l.last;i+) if(l.datai-1>x)break; if(i>l.last) l.datal.last+1=x; else for(j
11、=l.last;j>=i-1;j-) l.dataj+1=l.dataj; l.datai-1=x; l.last+; printf("n插入后数据为:n"); for(j=0;j<=l.last;j+) printf("%3d",l.dataj); printf("n"); return 0; (4) 删除顺序表中所有等于x的数据元素。#include<stdio.h>#define maxsize 100typedef struct int datamaxsize;int last;sequenlist;m
12、ain()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);printf("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
13、)printf("删除后元素为:n");for(j=0;j<=L.last;j+)printf("%3d",L.dataj);else printf("Not found!n");printf("n");(二)单链表1、必做题(1) 编写程序建立一个单链表,并逐个输出单链表中所有数据元素。#include<stdlib.h>#include<stdio.h>typedef int datattype;typedef struct nodechar data;struct node *n
14、ext;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)print
15、f("%c",r->data);r=r->next;(2) 在递增有序的单链表中插入一个新结点x,保持单链表的有序性。#include<stdio.h>#include<stdlib.h>typedef 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
16、("输入:");scanf("%d",&x);while(x!=0)s=(linklist*)malloc(sizeof(linklist);s->data=x;r->next=s;r=s;scanf("%d",&x); r->next=NULL;printf("插入:");scanf("%d",&y);p=head->next;while(p!=NULL)if(p->data<y) p=p->next;else break;q=
17、(linklist*)malloc(sizeof(linklist);q->data=y;m=head;while(m->next!=p)m=m->next;q->next=p;m->next=q; n=head->next;printf("序列为:");while(n!=NULL)printf("%3d",n->data);n=n->next;(3) 编写实现带头结点单链表就地逆置的子函数,并编写主函数测试结果。#include<stdio.h>#include<stdlib.h>
18、typedef int datattype;typedef struct nodeint data;struct node *next;linklist;main()int a;linklist *head,*s,*r,*p,*q,*t;head=(linklist*)malloc(sizeof(linklist);r=head;printf("输入:");scanf("%d",&a);while(a!=0)s=(linklist*)malloc(sizeof(linklist);s->data=a;r->next=s;r=s;sca
19、nf("%d",&a);r->next=NULL;printf("n序列为:n");p=head->next;while(p)printf("%d ",p->data);p=p->next;p=head->next;q=p->next;while(q!=NULL)t=q->next;q->next=p;p=q;q=t;head->next->next=NULL;head->next=p;printf("n转换后:n");p=head->
20、next;while(p!=NULL)printf("%d ",p->data);p=p->next;(三)栈和队列(1) 判断一个算术表达式中开括号和闭括号是否配对。#include <stdio.h>#include <stdlib.h>typedef char datatype;#define maxsize 64typedef struct datatype datamaxsize; int top; seqstack;int match(char exp,int n)char stmaxsize; int top=-1,i=0,
21、tag=1; while(i<n&&tag=1) if(expi='('|expi=''|expi='') top+; sttop=expi; if(expi=')') if(sttop='(') top-; else tag=0; if(expi='') if(sttop='') top-; else tag=0; if(expi='') if(sttop='') top-; else tag=0; i+; if(top>
22、=0) tag=0; return tag;main()int tag,i; char exp7; for(i=0;i<=6;i+) scanf("%c",&expi); tag=match(exp,7); if(tag) printf("算式表达式中的开括号和闭括号配对。"); else printf("算式表达式中的开括号和闭括号不配对!");getchar();getchar();(2) 测试“汉诺塔”问题。#include <stdio.h>void move(char x,char z)printf
23、("%c->",x); printf("%cn",z);void Hanoi(int n,char x, char y,char z) if(n=1) move(x,z); else Hanoi(n-1,x,z,y); move(x,z); Hanoi(n-1,y,x,z); main() int m; printf("请你输入A上面的碟子总数:"); scanf("%d",&m); Hanoi(m,'A','B','C');(3) 假设称正读和反读都相
24、同的字符序列为”回文”,试写一个算法判别读入的一个以为结束符的字符序列是否是“回文”。#include <stdio.h>#include <string.h>#include <malloc.h> typedef struct char data10; int top; seqstack;main()int i; char a9,b9; int m=0; seqstack *s; s=(seqstack*)malloc(sizeof(seqstack); s->top=-1; printf("请你输入8位的字符串:n"); for
25、(i=0;i<9;i+) scanf("%c",&ai); i=0; while(ai!='') s->top+; s->datas->top=ai; i+; i=0; while(s->top>=0) bi=s->datas->top; s->top-; i+; bi='' for(i=0;i<=8;i+) if(ai!=bi) m=1; if(m=0) printf("你所输入的字符串为回文!"); else printf("你所输入的字符串不是回文!");(四)串1、必做题(1) 编写输出字符串s中值等于字符ch的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新闻传播学媒体研究试题及答案
- 电商平台服务合同书
- 2025定制版手机的购销合同
- 天津专用2025届高考数学一轮复习考点规范练51随机抽样含解析新人教A版
- 2025房屋买卖合同书格式
- 2025年广告制作合同范本
- 2025(城市商业)租赁合同
- 2025【合作经营合同范本】
- 行政管理中的财务管理问题试题及答案
- 2025年企业移动应用开发合同官方版样本
- 工程承包再转让合同协议
- (广东二模)2025年广东省高三高考模拟测试(二)历史试卷(含答案)
- 2025湖南建投集团春季校园招聘239人笔试参考题库附带答案详解
- 2025-2030全球冰雪产业经营效益与发展投资策略建议研究报告
- 反邪教测试题及答案
- 业务合规制度培训
- GB/T 14601-2025电子特气氨
- 民航安全检查掌握人身检查课件
- 湖北省武汉第二中学2025届高三3月高考模拟考试数学试题试卷
- 国际压力性损伤-溃疡预防和治疗临床指南(2025年版)解读
- 透析患者贫血的护理查房
评论
0/150
提交评论