计算机软件基础实验1.docx

上传人:b****7 文档编号:8809633 上传时间:2023-02-01 格式:DOCX 页数:18 大小:141.22KB
下载 相关 举报
计算机软件基础实验1.docx_第1页
第1页 / 共18页
计算机软件基础实验1.docx_第2页
第2页 / 共18页
计算机软件基础实验1.docx_第3页
第3页 / 共18页
计算机软件基础实验1.docx_第4页
第4页 / 共18页
计算机软件基础实验1.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

计算机软件基础实验1.docx

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

计算机软件基础实验1.docx

计算机软件基础实验1

北京联合大学

实验报告

 

课程(项目)名称:

计算机软件技术基础实验一(顺序表)

学院:

自动化专业:

信息处理与智能技术

班级:

0910030204成绩:

学号:

*************姓名:

韩禹辉

 

2010年11月20 日

 

一.实验目的

(1)掌握线性表的概念。

(2)熟练掌握线性表的顺序存储结构。

(3)熟练掌握线性表在顺序存储结构上的运算。

(4)了解测试的思想。

二.实验内容

1.逆序元素——编写算法实现顺序表中元素的逆置。

要求按用户输入的数据建立一个顺序表。

在逆置的过程中使用最少的辅助存储单元。

2.删除多余元素——己知顺序表中的元素非递减有序排列,编写算法删除顺序表中值相同的多余的元素。

3.插入元素——编写算法,在非递减有序的顺序表中,插入一个给定的元素,插入后该顺序表仍然递增有序。

4.合并顺序表——有两个顺序表A(有m个元素)和B(有n个元素),其元素均按从小到大的升序排列。

编写算法,将这两个顺序表合并成一个顺序表C,要求C也是按从小到大的升序排列。

三.算法设计方案

1.

1)函数名:

InputSList1类型:

SList

2)入口参数:

3)出口参数:

L

4)功能:

初始化线性表

5)源程序清单:

structSListInitSList()

{

structSListL;

L.Last=-1;

returnL;

}

2.

1)函数名:

InputSList1类型:

SList

2)入口参数:

L

3)出口参数:

L

4)功能:

建立无序顺序表

5)设计思路:

定义顺序表结构体,从键盘输入数据给x,用指针指向顺序表的表尾元素,在表满之前,每输入一个新的不为一数据时,尾指针后移一位,直到输入的数据为负一或表满时完成建立。

6)流程图

 

 

7)源程序清单

structSListInputSList1(structSListL)

{intx=0;

printf("\n请输入数据,结束输入-1!

\n");

scanf("%d",&x);

while(x!

=-1)

{L.Data[++L.Last]=x;

if(L.Last==MAXSIZE-1)

{printf("\n顺序表已满!

\n");

break;

}

scanf("%d",&x);

}

returnL;

}

3.

1)函数名:

InputSList类型:

SList

2)入口参数:

L

3)出口参数;L

4)功能:

向线性表中输入数据

5)设计思路:

创建空线性表,从键盘输入数据到线性表中,以-1结束,然后修改表长,输出线性表。

6)源程序清单

structSListInputSList(structSListL)

{

inti=0;

intnumber=0;

printf("\n请输入顺序表的初始化数据,以-1表示结束\n");

while(i<30)

{

scanf("%d",&number);

if(number==-1)

{

break;

}

L.Data[i]=number;

L.Last++;

i++;

}

for(intj=0;j<=L.Last;j++)

{

printf("%d",L.Data[j]);

}

returnL;

}

7)流程图:

 

4.

1)函数名:

outputSList类型:

SList

2)入口参数:

L

3)出口参数:

4)功能:

输出顺序表

5)设计思路:

定义指针j指向顺序表中下标为0处,当表不为空时,指针依次向后移动,每移动到一个数据所在的位置时将其输出,直到移动到表尾将所有数据输出后为止。

6)源程序清单

voidoutputSList(structSListL)

{intj;

printf("\n顺序表的数据为:

\n");

if(L.Last!

=-1)

for(j=0;j<=L.Last;j++)printf("%d",L.Data[j]);

elseprintf("顺序表为空!

\n");

printf("\n");

}

7)流程图:

 

 

5.

1)函数名:

reverse类型:

SList

2)入口参数:

*L

3)出口参数:

4)功能:

将顺序表中元素的逆置

5)设计思路:

定义两个指针变量i,j和结点t。

i指向下标为0处,j指向下标为L.length-1处,i++,j--,利用循环将i、j所指向的数据交换。

6)源程序清单

voidreverse(SList*L)

{inti,j;

datatypet;

for(i=0,j=L->length-1;i

{t=L->data[i];L->data[i]=L->data[j];L->data[j]=t;}

}

7)流程图:

 

 

6.

1)函数名:

delete类型:

SList

2)入口参数:

L

3)出口参数;无

4)功能:

删除顺序表中值相同的多余的元素

5)设计思路:

i++,利用循环,将第i个元素后面的元素和此元素进行比较,若有和此元素想等的元素,利用a[k]=a[k+1]的思想将其删除。

6)流程图:

 

7)源程序清单:

voiddelete(structSListL)

{

inti=0,j=0,k=0;

for(i=0;i<=L.Last;i++)

{

for(j=i+1;j

{

if(L.Data[i]==L.Data[j])

{

for(k=j;k

L.Data[k]=L.Data[k+1];

L.Last--;

j--;

}

}

}

for(j=0;j<=L.Last;j++)

{

printf("%d",L.Data[j]);

}

}

7.

1)函数名:

insert类型:

SList

2)入口参数:

L,x

3)出口参数:

L

4)功能:

插入元素x到非递减有序的顺序表中

5)设计思路:

通过一个while循环查找适合x插入的位置,利用一个for循环将该位置后的所有数据后移一位给要插入的x留出位置,再将x放入该位置,最后修改表长。

6)源程序清单:

voidinsert(SList*L,intx)

{inti,k;

i=0;

while((ilength-1)&&(x>=L->data[i]))i++;

for(k=L->length-1;k>=i;k--)L->data[k+1]=L->data[k];

L->data[i]=x;

L->length++;

}

7)流程图:

 

8.

1)函数名:

unit类型:

SList

2)入口参数:

L,L2,L3

3)出口参数:

L3

4)功能:

将两个有序顺序表合并

5)设计思路:

6)源程序清单(程序应添加必要的注释)

voidunit(structSListL,structSListL1,structSListL2)

{

inti=0,j=0,k=0,m=0;

while(i<=L1.Last&&j<=L2.Last)

{

if(L1.Data[i]

L.Data[k++]=L1.Data[i++];

else

L.Data[k++]=L2.Data[j++];

}

while(i<=L1.Last)

{

L.Data[k++]=L1.Data[i++];

}

while(j<=L2.Last)

{

L.Data[k++]=L2.Data[j++];

}

L.Last=k-1;

for(m=0;m<=L.Last;m++)

{

printf("%d",L.Data[m]);

}

printf("\n");

}

7)流程图:

 

四.调试过程

(1)编译出现的主要问题及解决方法

L->data[i]=t;L->data[i]=L->data[j];L->data[j]=t

t=L->data[i];L->data[i]=L->data[j];L->data[j]=t

for(i=0;i<=L1.length;i++)

for(i=0;i<=L1.length-1;i++)

L.Data[k+1]=L.Data[k];

L.Data[k]=L.Data[k+1];

scanf(%d,&data)

scanf("%d",&data)

(2)运行出现的主要问题及解决方法

五.运行结果分析

(1)运行结果

逆置:

删除多余元素:

插入:

合并:

 

(2)运行结果分析

逆置

测试项

输入参数

输出参数

存在问题

空表

表长=5(奇数)

12345

54321

表长=6(偶数)

123456

654321

删除相同元素

测试项

输入参数

输出参数

存在问题

空表

有1组相同元素

122345

12345

有2组相同元素

122334

1234

有3组相同元素

1122334

1234

插入

测试项

输入参数

输出参数

存在问题

空表

在表头插入

向34567中插入1

134567

在表尾插入

向25689中插入4

245689

在表中间插入

向34678中插入5

345678

合并

测试项

输入参数

输出参数

存在问题

1,2均为空

1空2不空

1:

2:

23456

23456

1,2均不空

1:

13579

2:

2468

123456789

六、体会

通过本次实验,收获了很多,使我对计算机软件技术有了更深的了解,在学习探索的过程中,更发现了许多自己的不足。

在编程过程中,遇到了很多的困难,因为C语言知识不是很扎实,导致这次实验不是很顺利,但是在老师和同学的帮助下,最后终于能及时的完成这次实验,谢谢老师和同学们的帮助!

仔细推敲之后,才发现这个实验并不是很难。

只要勇敢的面对它,就能克服一切困难。

通过这次实验,更深刻的理解并掌握了线性表的概念;熟练掌握线性表的顺序存储结构和线性表在顺序存储结构上的运算;了解测试的思想。

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

当前位置:首页 > 高等教育 > 历史学

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

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