顺序表的基本操作(5篇)
第一篇:顺序表的基本操作
*********************************** 实验题目 :顺序表的基本操作
班 级 :
姓 名: 学 号: 专 业: 实验完成的时间:
*********************************
一、实验目的
(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<1)||(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(i<1||(i>L->last+2))
printf(“删除的位置错误n”);else {
for(j=i;j<=(*L).last;j++)
(*L).vec[j-1]=(*L).vec[j];
(*L).last--;
} } void listprint(sequenlist *L)/*输出线性表*/ { int i;for(i=0;i<=(*L).last;i++)printf(“i,e=%d,%dn”,i,L->vec[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插入的数:%dn”,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<=(*L).last;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<=j;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 <= L->last;i++){
for(t = i+1;t<= L->last;t++)
{
if(L->vec[i] == L->vec[t])
{
for(j = t;j<= L->last;j++)
c语言指针实验总结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_顺序表的基本操作(推荐)
实 验 报 告
实验课程
数据结构
实验项目
实验
二、顺序表的基本操作
实验地点
指导教师
学生姓名
教师评分
浙江传媒学院实验报告
一、实验目的
1、掌握线性表的顺序存储结构;
2、掌握顺序表及其基本操作的实现;
3、掌握数据结构及算法的程序实现的基本方法。
二、实验设备
1.安装有WinXP的PC一台;
2.安装有软件VC6或者Visual Studio2005。
三、实验内容
1、建立含有若干个元素的顺序表;
2、对已建立的顺序表实现插入、删除、查等基本操作;
3、对两个顺序表进行合并操作。
四、实验步骤
1.根据下面的表格,定义一个表示数据元素的结构体。
2.根据教材的内容,定义顺序表的结构体。
3.根据教材的内容,编写代码,实现顺序表的下列函数。
浙江传媒学院实验报告
4.定义数据元素输入函数如下。请完善代码。
5.定义顺序表的创建函数如下,请完善代码。
6.定义数据元素的输出函数如下,请完善代码。
7.定义main函数,要求完成如下功能。
A.定义三个顺序表分别为list1, list2,list3; B.初始化两个顺序表list1和list2;C.输入顺序表list1;
浙江传媒学院实验报告
D.输入list2;E.合并list1和list2到list3中; F.删除list3中的
第三篇:顺序表的操作实验报告
顺序表的基本操作
一、实验目的

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。