线性表的插入和删除数据结构.docx
- 文档编号:7578095
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:14
- 大小:64.33KB
线性表的插入和删除数据结构.docx
《线性表的插入和删除数据结构.docx》由会员分享,可在线阅读,更多相关《线性表的插入和删除数据结构.docx(14页珍藏版)》请在冰豆网上搜索。
线性表的插入和删除数据结构
电子信息工程学系实验报告——适用于计算机课程
成绩:
课程名称:
指导教师(签名):
实验项目名称:
线性表的插入和删除实验时间:
2012、3、5
班级:
计应102姓名:
学号:
实验目的:
熟悉掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现,并熟悉其各自的优缺点及适用性。
实验环境:
C—Free5.0
实验内容及过程:
题目1:
编写程序实现下列的要求:
(1)设数据元素为整数,实现这样的线性表的顺序存储表示。
(2)键盘输入10个数据元素,利用顺序表的基本操作,建立该表。
(3)利用顺序表的基本操作,找出表中的最大的和最小的数据元素(用于比较的数据元素为整数)。
(4)*若数据元素为学生成绩(含姓名、成绩等字段),重新编程,实现上面的要求。
要求尽可能少地修改前面的程序来得到新程序。
(这里用于比较的字段为分数)
题目2:
编写程序实现下列的要求:
(1)设学生成绩表中的数据元素为学生成绩(含姓名、成绩字段),实现这样的线性表的链式存储表示。
(2)键盘输入若干个数据元素(用特殊数据来标记输入数据的结束),利用链表的基本操作(前插或后插算法),建立学生成绩单链表。
(3)键盘输入关键字值x,打印出表中所有关键字值<=x的结点数据。
(用于比较的关键字字段为分数)。
(4)输入关键字值x,删除表中所有关键字值<=x的结点。
(用于比较的关键字字段为分数)。
实验结果及分析:
题目一:
(4):
题目二:
实验心得:
通过这次的实验,对线性表和单链表的创建和修改有了初步的认识,和同学的讨论互相弥补了不足,相信在未来的学习中会有更大的收获。
附录:
题目一代码:
#include"stdio.h"
#include"conio.h"
typedefintdatatype;
structseqlist
{
intmaxnum;
intn;
datatype*element;
};
typedefstructseqlist*Pseqlist;
Pseqlistcreatnulllist_seq(intm)/*建立空的顺序表*/
{
Pseqlistp=(Pseqlist)malloc(sizeof(structseqlist));
if(p!
=NULL)
{
p->element=(datatype*)malloc(sizeof(datatype)*m);
if(p->element!
=NULL)
{
p->maxnum=m;
p->n=0;
return(p);
}
elsefree(p);
}
printf("outofspace");
returnNULL;
}
Pseqlistinit_seq(Pseqlistp,intn)/*初始化空的顺序表,即填充数据,顺序表的实际元素个数n由参数提供*/
{
inti;
printf("inputtheelementofseqlist:
");
for(i=0;i scanf("%d",&p->element[i]); p->n=n; return(p); } intinsertpost_seq(Pseqlistp,inti,datatypex)/*在i之后插入一个元素x*/ { intj; if(p->n>=p->maxnum) { printf("overflow"); return(0); } if(i<0||i>p->n) { printf("notexist"); return(0); } for(j=p->n-1;j>=i+1;j--) p->element[j+1]=p->element[j]; p->element[i+1]=x; p->n++; return (1); } voidprint(Pseqlistp)/*打印顺序表中的元素*/ { inti; for(i=0;i printf("%d",p->element[i]); } intFinMax(Pseqlistp) { intmax=p->element[0]; inti; for(i=1;i { if(max max=p->element[i]; } returnmax; } intFinMin(Pseqlistp) { intmin=p->element[0]; inti; for(i=1;i { if(min>p->element[i]) min=p->element[i]; } returnmin; } main() { Pseqlistp; intm,n,i,x,k; printf("inputthesizeofseqlistm: ");/*输入顺序表的最大空间m,建立空的顺序表*/ scanf("%d",&m); p=creatnulllist_seq(m); printf("inputtherealnumberofseqlistn(n ");/*输入顺序表的实际长度n,初始化顺序表*/ scanf("%d",&n); p=init_seq(p,n); /*输出插入之前顺序表的元素*/ print(p); printf("\n"); printf("inputi,x: "); scanf("%d%d",&i,&x);/*k的值用来表示是否插入成功*/ k=insertpost_seq(p,i,x); if(k==1)print(p);/*如果插入成功,输出插入之后顺序表的元素*/ printf("\nmax: %d,min: %d\n",FinMax(p),FinMin(p)); getch(); } 题目一的(4)的代码: #include"stdio.h" #include"conio.h" //typedefintdatatype; typedefstructstudent { intscore; charname[30]; }datatype; structseqlist { intmaxnum; intn; datatype*element; }; typedefstructseqlist*Pseqlist; Pseqlistcreatnulllist_seq(intm)/*建立空的顺序表*/ { Pseqlistp=(Pseqlist)malloc(sizeof(structseqlist)); if(p! =NULL) { p->element=(datatype*)malloc(sizeof(datatype)*m); if(p->element! =NULL) { p->maxnum=m; p->n=0; return(p); } elsefree(p); } printf("outofspace"); returnNULL; } Pseqlistinit_seq(Pseqlistp,intn)/*初始化空的顺序表,即填充数据,顺序表的实际元素个数n由参数提供*/ { inti; printf("输入10个分数: 输入10个名字: "); for(i=0;i scanf("%d%s",&p->element[i].score,p->element[i].name); p->n=n; return(p); } intinsertpost_seq(Pseqlistp,inti,datatypex)/*在i之后插入一个元素x*/ { intj; if(p->n>=p->maxnum) { printf("overflow"); return(0); } if(i<0||i>p->n) { printf("notexist"); return(0); } i-=2; for(j=p->n-1;j>=i+1;j--) p->element[j+1]=p->element[j]; p->element[i+1]=x; p->n++; return (1); } intFinMax(Pseqlistp) { intmax=p->element[0].score; inti; for(i=1;i { if(max max=p->element[i].score; } returnmax; } intFinMin(Pseqlistp) { intmin=p->element[0].score; inti; for(i=1;i { if(min>p->element[i].score) min=p->element[i].score; } returnmin; } voidprint(Pseqlistp)/*打印顺序表中的元素*/ { inti; for(i=0;i printf("姓名: %s分数: %d",p->element[i].name,p->element[i].score); } main() { Pseqlistp; intm,n,i,x,k; datatypeaa; printf("inputthesizeofseqlistm: ");/*输入顺序表的最大空间m,建立空的顺序表*/ scanf("%d",&m); p=creatnulllist_seq(m); printf("inputtherealnumberofseqlistn(n ");/*输入顺序表的实际长度n,初始化顺序表*/ scanf("%d",&n); p=init_seq(p,n); /*输出插入之前顺序表的元素*/ print(p); printf("\n"); printf("inputi,x.score,x.aa.name: "); scanf("%d%d%s",&i,&aa.score,aa.name);/*k的值用来表示是否插入成功*/ k=insertpost_seq(p,i,aa); if(k==1)print(p); /*如果插入成功,输出插入之后顺序表的元素*/ printf("\n%d%d",FinMax(p),FinMin(p)); printf("分别是最大的和最小的数据"); getch(); } 题目二代码: /*线性表的单链表表示: 类型和界面函数定义*/ #include /*定义链接表元素类型。 应根据需要定义*/ #defineNULL0 typedefintposition; typedefstructstudent { intscore; charname[20]; }DataType; structNode;/*单链表结点类型*/ typedefstructNode*PNode;/*结点指针类型*/ typedefstructNode*List;/*单链表类型*/ structNode{/*单链表结点结构*/ DataTypeinfo; PNodelink; }; printlist(ListL) {Listp; p=L->link; printf("Thelistare: "); while(p! =NULL) {printf("%d,",p->info); p=p->link; } printf("\n"); } insertList(ListL,positionp,DataTypex) {positioni; Lists,q; i=0; q=L; while(q->link! =NULL&&i {q=q->link; i++; } /*q不为NULL*/ s=(List)malloc(sizeof(structNode)); s->info=x; s->link=q->link; q->link=s; } deleteList(ListL,positionp) { positioni; Lists,q; i=0; q=L; while(i {q=q->link; i++; } /*以上程序段使得q指向ap-1*/ s=q->link;/*s指向ap*/ q->link=q->link->link; free(s); } deleteListX(ListL,DataTypex) {Listq,s; q=L; while(q->link! =NULL&&q->link->info.score! =x.score) q=q->link; if(q->link==NULL)return; s=q->link;/*s指向ap*/ q->link=q->link->link; //free(s); } intListIsNull(ListL) {if(L->link==NULL)return1; elsereturn0; } ListcreateNulllist() {Lists; s=(List)malloc(sizeof(List)); s->info.score=100; s->link=NULL; returns; } DeleteLess(ListL,intdata) { ListT=L; while(L! =NULL) { if(L->info.score<=data) deleteListX(T,L->info); L=L->link; } } voidFindLess(ListL,intdata) { while(L! =NULL) { if(L->info.score<=data) printf("姓名: %s分数: %d\n",L->info.name,L->info.score); L=L->link; } } main() {Listhead; inti=0,X; head=createNulllist(); printf("请先输入学生的分数,再输入学生的姓名: \n"); for(;i<10;++i) { DataTypetest; scanf("%d%s",&test.score,test.name); insertList(head,i,test); } printf("请输入节点数据"); scanf("%d",&X); FindLess(head,X); DeleteLess(head,X); printlist(head); getch(); } 备注: 以上各项空白处若填写不够,可自行扩展
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线性 插入 删除 数据结构