人人范文网 范文大全

顺序表的基本操作

发布时间:2020-03-03 02:17:38 来源:范文大全 收藏本文 下载本文 手机版

*********************************** 实验题目 :顺序表的基本操作

班 级 :

姓 名: 学 号: 专 业: 实验完成的时间:

*********************************

一、实验目的

(1) (2) (3) (4) 掌握顺序表的基本运算,熟悉对顺序表的一些基本操作和具体函数的定义。 掌握顺序表的存储结构及其基本操作。

熟悉c语言程序的基本结构,掌握函数定义、调用等功能。

熟悉c语言环境的使用及程序的输入、编辑、调试和运行的全过程。

二、实验要求

(1) 熟练掌握线性表的存储结构及其基本操作。

(2) 理解所给出的算法,掌握顺序表在实际中的应用。

(3) 将上机程序调试通过,并能独立完成一至两个拓展题目。

三、实验内容

实现顺序表上的插入、删除等操作。调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果。加深对有关算法的理解。

(1)主要内容:

#define MAXSIZE 100 /*宏定义*/ //#define OVERFLOW -2 #include \"stdio.h\" /*包含输入输出文件*/

typedef int data; typedef struct /*定义顺序表的结构*/ {data vec[MAXSIZE]; /*顺序表数据成员所占据的存储空间*/ int last; /*顺序表中最后一个元素在数组中的下标(或向量中的位置)从0开始*/ }sequenlist; int insert(L,i,x) /*在顺序表的第i个元素之前插入一个新元素x*/ sequenlist *L; int i; data x;

{ int j; if(((*L).last)>=MAXSIZE-1) {printf(\"the list is overflow!\\n\"); return(0); /*溢出判断*/ } else if((i(*L).last+1)) {printf(\"position is not correct!\\n\"); return(0); /*插入位置不正确*/ } else {for(j=(*L).last;j>=i-1;j--) /*后移元素*/ (*L).vec[j+1]=(*L).vec[j]; (*L).vec[i-1]=x; /*插入新元素*/ (*L).last=(*L).last+1;/*修改last的值*/ } return(1); } void DELETET(L,i) sequenlist *L; int i; { int j; if(iL->last+2))

printf(\"删除的位置错误\\n\"); else {

for(j=i;j

(*L).vec[j-1]=(*L).vec[j];

(*L).last--;

} } void listprint(sequenlist *L) /*输出线性表*/ { int i; for(i=0;ivec[i]); } main() { sequenlist sl={{1,2,3,4,5,6,7,8,9,10},9};//直接给顺序表赋初值 sequenlist *L;/*定义一个指向顺序表类型的指针变量*/ int i,j,x; //elemtype e;

L=&sl; /*给指针变量赋值*/ printf(\"请输入你插入的位置和数\\n\"); scanf(\"%d,%d\",&i,&x); printf(\"这个插入的位置: %d \\n插入的数:%d\\n\",i,x); insert(L,i,x); listprint(L); printf(\"请输入删除的位置:\"); scanf(\"%d\",&j); DELETET(L,j); listprint(L); } (2)预习思考题

(1) 定义一个定位函数locate(L,x),具有元素检索的功能。当顺序表中存在一个值为x的数据元素时,返回第一次找到的数据元素的位序,否则,给出一个值,表示值为x的元素不存在。在主程序中调用该函数,分析操作结果。 算法如下

int locat(L,x) /* x由主函数输入并接受locat的返回值 */ sequenlist *L; int x; { int i; for(i=0;i

if((*L).vec[i]==x)

return (i+1); /*如果存在x则返回x的位置*/ return 0; /*否则返回0 */ }

说明:主函数输入定位值X由函数locat(L,x)接收完成定位功能后返回x的位置,若X不存在则返回0,主函数接受返回值,若返回值不等于0则调用listprint(L)函数输出结果,否则输出X不在线性表中

(2) 定义一个逆置函数diverse(L),把顺序表进行逆置。在主程序中调用该函数,分析操作结果。 void diverse(L) sequenlist *L; {

int i,j,n,k;

n=(*L).last;

j=(*L).last/2;

for(i=0;i

{ k=(*L).vec[i];

(*L).vec[i]=(*L).vec[n-i];

(*L).vec[n-i]=k;

} } 运行程序前

运行程序后

说明:主函数只需调用diverse(L)完成逆置功能,并调用listprint(L)函数输出结果。 (3)定义一个函数delsame(L),把顺序表中重复的元素删除掉,只保留一个。在主程序中调用该函数,分析操作结果

void delsame( sequenlist *L ) { int i = 0, j, t; for(i = 0; i last;i++) {

for( t = i+1; tlast;t++)

{

if(L->vec[i] == L->vec[t])

{

for(j = t; jlast; j++)

L->vec[j-1] = L->vec[j];

L->last --;

}

} } } 运行程序前

运行程序后

说明:主函数只需调用delsame(L),把顺序表中重复的元素删除掉,只保留一个,并调用listprint(L)函数输出结果。

四、算法设计与编码

1.本实验用到的理论知识

顺序表的数据结构的定义,C语言中循环语句,if条件语句,函数定义、调用等相关知识。

2.算法概要设计 具体有以下函数:

(1)insert(L,i,x) 在顺序表的第i个元素之前插入一个新元素x.(2)deletet(L,i) 删除顺序表的第i个元素。 (3)listprint(L) 输出顺序表

(4)locate(L,x) 定位函数,具有元素检索的功能 (5)diverse(L) 逆置函数,把顺序表进行逆置

(6)delsame(L), 把顺序表中重复的元素删除掉,只保留一个 主函数调用以上函数完成相关功能。 3.运行与测试

(1) 在调试程序的过程中遇到什么问题,是如何解决的?

在定位时出现多次返回0,在单步调试后,吧return 0 放到if语句外。

(2) 程序运行的结果如何?

五、总结和心得

通过本次实验我学会了顺序表的基本运算,了解了顺序表的一些基本操作和具体函数,学会了定 义线性表的顺序存储类型。在实验过程中编写insert函数的时候对if(((*L).last)>=MAXSIZE-1) 很不理解,不知道为什么是MAXSIZE-1,而不是MAXSIZE;

顺序表的操作实验报告

数据结构_实验2_顺序表的基本操作(推荐)

第04章 表的基本操作

档案表顺序

初中历史顺序表

笔画顺序表

笔画顺序表

汽车驾驶操作顺序

认识数位顺序表

顺序表(基础题)

顺序表的基本操作
《顺序表的基本操作.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档