计算机软件技术基础实验报告.docx
- 文档编号:26282720
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:22
- 大小:18.85KB
计算机软件技术基础实验报告.docx
《计算机软件技术基础实验报告.docx》由会员分享,可在线阅读,更多相关《计算机软件技术基础实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
计算机软件技术基础实验报告
实验一线性表的基本操作
一、实验目的与基本要求
1.掌握数据结构中的一些基本概念。
数据、数据项、数据元素、数据类型和数据结构,以及它们之间的关系。
2.了解数据的逻辑结构和数据的存储结构之间的区别与联系;数据的运算与数据的逻辑结构的关系。
3.掌握线性表的基本操作:
插入、删除、查找以及线性表的合并等运算。
4.掌握运用C语言上机调试线性表的基本方法。
二、实验条件
1.硬件:
一台微机
2.软件:
操作系统和C语言系统
三、实验方法
确定存储结构后,上机调试实现线性表的基本运算。
四、实验内容
1.试编写在无头结点的单链表上实现线性表基本运算LOCATE(L,X),INSERT(L,X,1)和DELETE(L,1)的算法。
2.假设有两个按数据元素值递增有序排列的线性表A和B,均以单链表作为存储结构。
编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许值相同)排列的线性表C,并要求利用原表(即A表和B表)结点空间存放表C。
3.将一个线性表中的值就地逆置。
4.在线性表的顺序存储结构的第一个位置上插入一个元素。
(注意区分链表和顺序表)
实验代码:
#include"stdlib.h"
#include"stdio.h"
structnode//定义结构体
{
intd;
structnode*next;
};
structnode*head1,*head2,*p,*q;
voidpre(structnode*head)//打印数据
{
printf("链表中的数据为:
\n");
p=head;
while(p!
=NULL)
{
printf("%5d",p->d);
q=p;p=p->next;
}
printf("\n");
}
structnode*creat()//建立链表
{structnode*head;
intx;
printf("输入你要储存的数据:
\n");
head=NULL;
q=NULL;
scanf("%d",&x);
while(x>0)
{
p=(structnode*)malloc(sizeof(structnode));
p->d=x;
p->next=NULL;
if(head==NULL)head=p;
elseq->next=p;
q=p;
scanf("%d",&x);
getchar();
}
pre(head);
return(head);
}
voidlocate(structnode*head,intx)//查找链表中的数据
{
intu=1;
p=head;
while(p->next!
=NULL)
{if(p->d==x)
break;
else
{p=p->next;u++;}
}
if(p->d!
=x)
printf("无此结点");
printf("在链表中的位置为:
");
printf("%d",u);
}
voidinsert(structnode*head,intx,inti)//插入数据
{p=head;intj=1;
q=(structnode*)malloc(sizeof(structnode));
q->d=x;
if(i==1)
{q->next=head;
head=q;
}
else
{
while((j
=NULL))
{j++;p=p->next;}
q->next=p->next;
p->next=q;}
}
voiddelet(structnode*head,inti)//删除数据
{p=head;intj=1;
if(i<0)printf("无此位置");
if(i==1)
{q=head;head=head->next;free(q);
}
else
{
while((j
=NULL))
{p=p->next;j++;}
q=p->next;
p->next=q->next;
free(q);}
}
voidhebing(structnode*x,structnode*y)//合并两个链表
{
p=x;
q=y;
while(p->next!
=NULL)
p=p->next;
p->next=q;
pre(x);
}
voidpaixu(structnode*head)//对链表中的数据进行排序
{intm,n,i=1,t;
p=head;
while(p->next!
=NULL)
{p=p->next;i++;}
p=head;
for(n=i;n>1;n--)
{p=head;
for(m=1;m { q=p->next; if(p->d {t=p->d; p->d=q->d; q->d=t; } p=p->next; } } } voidcaozuo(structnode*head)//操作界面 { intm,n;chart; printf("输入你要的操作: ,查找2,插入3,删除\n"); scanf("%c",&t); switch(t) { case'1': {printf("输入你要查找的元素的值: \n"); scanf("%d",&m); locate(head,m);}break; case'2': {printf("输入你要插入的元素的值和位置: \n"); scanf("%d",&m); scanf("%d",&n); insert(head,m,n);pre(head);}break; case'3': {printf("输入你要删除的元素的位置: \n"); scanf("%d",&m); delet(head,m);pre(head);}break; default: printf("error\n"); } } voidmain()//主函数 { charfrag='y',n=NULL; printf("输入你要建立的第A链表中的元素: \n"); head1=creat(); printf("输入你要建立的第B链表中的元素: \n"); head2=creat(); do {printf("选择你要操作的链表A/B或者合并排序操作C: \n");//选择操作 scanf("%c",&n); getchar(); switch(n) { case'A': {caozuo(head1);}break; case'B': {caozuo(head2);}break; case'C': {hebing(head1,head2);paixu(head1);pre(head1);}break; default: printf("error\n"); } printf("\n是否继续y/n: \n"); scanf("%c",&frag); getchar(); }while(frag=='y'); } 实验2栈和队列的基本操作 一、实验目的与基本要求 1.掌握栈和队列的顺序存储和链式存储结构 2.掌握栈和队列的特点。 3.掌握栈和队列的基本运算。 二、实验条件 1.硬件: 一台微型计算机 2.软件: 操作系统和C语言系统。 三、实验方法 确定存储结构后,上机调试实现栈和队列的基本运算。 四、实验内容 1.写出栈的入栈和出栈的算法 2.写出队列的入队和出队算法。 实验代码: #include"stdlib.h" #include"stdio.h" structnode { intd; structnode*next; }; intnum;structnode*head; voidpre() { structnode*p; printf("链表中的数据为: \n"); p=head; while(p! =NULL) { printf("%5d",p->d); p=p->next; } printf("\n"); } voidcreat() { structnode*p,*q; intx; printf("输入你要储存的数据,输入负数作为结束: \n"); head=NULL; q=NULL; scanf("%d",&x); while(x>0) { num++; p=(structnode*)malloc(sizeof(structnode)); p->d=x; p->next=NULL; if(head==NULL)head=p; elseq->next=p; q=p; scanf("%d",&x); getchar(); } pre(); } voidinsert(intx,inti) { structnode*p,*q; p=head;intj=1; q=(structnode*)malloc(sizeof(structnode)); q->d=x; if(i==1) {q->next=head; head=q; } else { while((j =NULL)) {j++;p=p->next;} q->next=p->next; p->next=q;} } voiddelet(inti) { structnode*p,*q; p=head;intj=1; if(i<0)printf("无此位置"); if(i==1) {q=head;head=head->next;free(q); } else { while((j =NULL)) {p=p->next;j++;} q=p->next; p->next=q->next; free(q);} } voidpush() { intn; num++; printf("请输入数据: "); scanf("%d",&n); getchar(); insert(n,num); pre(); } voidpop() { delet(num); num--; pre(); } voidrudui() { intn; num++; printf("请输入数据: "); scanf("%d",&n); getchar(); insert(n,1); pre(); } voidchudui() { delet(num); num--; pre(); } voidmain() { charfrag='y';intn; creat(); do {printf("选择你要的操作入栈出栈入队出队: \n"); scanf("%d",&n); getchar(); switch(n) { case1: {printf("入栈操作"); push();printf("\n");}break; case2: { printf("出栈操作"); pop();printf("\n");}break; case3: {printf("入队操作"); rudui();printf("\n");}break; case4: {printf("出队操作"); chudui();printf("\n");}break; default: printf("error\n"); } printf("\n是否继续y/n: \n"); scanf("%c",&frag); getchar(); }while(frag=='y'); } 实验3二叉树的构造 一、实验目的与基本要求 熟练掌握二叉树的构造方法。 二、实验条件 1.硬件: 微机 2.软件: 操作系统和C语言系统 三、实验方法 确定存储结构后,上机调试二叉树的构造方法。 四、实验内容 设计一个读入一串整数构成一棵二叉树的程序。 (深度至少为2) 实验代码: #include #include structbtnode//二叉树结构体 { chard; structbtnode*lchild; structbtnode*rchild; }; structbtnode*creatbt(structbtnode*bt,intk)//建立二叉树 { structbtnode*p,*t; t=(structbtnode*)malloc(sizeof(structbtnode)); printf("输入元素(输入时结束所在分枝): "); charb; scanf("%c",&b); getchar(); if(b! ='0') { p=(structbtnode*)malloc(sizeof(structbtnode)); p->d=b;p->lchild=NULL;p->rchild=NULL; if(k==0) t=p; if(k==1) bt->lchild=p; if(k==2) bt->rchild=p; creatbt(p,1); creatbt(p,2); } returnt; } voidpretrav(structbtnode*bt)//前序遍历 { if(bt! =NULL) { printf("%c\n",bt->d); pretrav(bt->lchild); pretrav(bt->rchild); } return; } voidintrav(structbtnode*bt)//中序遍历 { if(bt! =NULL) { intrav(bt->lchild); printf("%c\n",bt->d); intrav(bt->rchild); } return; } voidpostrav(structbtnode*bt)//后序遍历 { if(bt! =NULL) { postrav(bt->lchild); postrav(bt->rchild); printf("%c\n",bt->d); } return; } intmain() { structbtnode*m;charfrag='y'; ints; do { printf("请选择\n1、建立二叉树\n2、前序遍历\n3、中序遍历\n4、后序遍历\n5、退出\n"); scanf("%d",&s); getchar(); switch(s) { case1: m=creatbt(0,0);break; case2: pretrav(m);break; case3: intrav(m);break; case4: postrav(m);break; default: { printf("是否继续\ny/n"); scanf("%c",&frag); getchar(); };break; } }while(frag=='y'); } 实验4排序的基本操作 一、实验目的与基本要求 1.掌握常用的排序方法,并用高级语言实现排序算法。 2.理解排序的定义和各种排序的特点。 3.了解排序过程以及依据的原则,并了解各种排序方法的时间复杂度分析。 二、实验条件 1.硬件: 一台微机 2.软件: 操作系统和C语言系统 三、实验方法 确定存储结构后,上机调试不同的排序方法。 四、实验内容 1.设计一待排序的线性表以顺序存储结构存储,试写出冒泡排序算法。 2.给出n个学生的考试成绩表,每条信息由姓名与分数组成,试设计一个算法: (1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次。 (2)按名次列出每个学生的姓名与分数。 实验代码: #include"stdlib.h" #include"stdio.h" structnode//结构体变量 { intf; intm; charn; structnode*next; }; voidpre(structnode*head)//打印数据 {structnode*p; printf("链表中的数据为: \n"); printf("名次姓名分数\n"); p=head; while(p! =NULL) { printf("%5d",p->m); printf("%5c",p->n); printf("%5d",p->f); printf("\n"); p=p->next; } printf("\n"); } intnum; structnode*creat()//建立数据 { structnode*head,*q,*p; intx,y,j;charz; printf("输入录入学生的人数: \n"); head=NULL; q=NULL; scanf("%d",&num); getchar(); for(j=0;j { printf("输入学生的姓名: \n"); scanf("%c",&z); getchar(); printf("输入学生的分数: \n"); scanf("%d",&x); getchar(); p=(structnode*)malloc(sizeof(structnode)); p->n=z; p->f=x; p->m=0; p->next=NULL; if(head==NULL)head=p; elseq->next=p; q=p; } pre(head); return(head); } structnode*paixu(structnode*head)//按分数排序 { inti,j; structnode*q,*p,*k,*t; t=(structnode*)malloc(sizeof(structnode)); t->next=head; for(i=num-1;i>0;i--) { q=t; for(j=0;j { p=q->next; k=p->next; if(k->f>p->f) { p->next=k->next; q->next=k; k->next=p; } q=q->next; } } q=t->next; j=0; q->m=1; for(i=1;i { p=q->next; if(q->f==p->f) { p->m=q->m; } else p->m=q->m+1; q=q->next; } return(t->next); } voidmain() { structnode*head,*m; head=creat(); m=paixu(head); printf("按名次排序后"); pre(m); getchar(); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件 技术 基础 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)