计算机软件技术基础实验报告.docx

上传人:b****9 文档编号:26282720 上传时间:2023-06-17 格式:DOCX 页数:22 大小:18.85KB
下载 相关 举报
计算机软件技术基础实验报告.docx_第1页
第1页 / 共22页
计算机软件技术基础实验报告.docx_第2页
第2页 / 共22页
计算机软件技术基础实验报告.docx_第3页
第3页 / 共22页
计算机软件技术基础实验报告.docx_第4页
第4页 / 共22页
计算机软件技术基础实验报告.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

计算机软件技术基础实验报告.docx

《计算机软件技术基础实验报告.docx》由会员分享,可在线阅读,更多相关《计算机软件技术基础实验报告.docx(22页珍藏版)》请在冰豆网上搜索。

计算机软件技术基础实验报告.docx

计算机软件技术基础实验报告

实验一线性表的基本操作

一、实验目的与基本要求

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((jnext!

=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((jnext!

=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->dd)

{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((jnext!

=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((jnext!

=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();

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1