1.C语言顺序表实验报告
- 格式:doc
- 大小:22.00 KB
- 文档页数:4
实验报告要求
一、实验目的
二、实验内容
三、程序流程图
实验结果(要求检测所有情况的正确性,写出测试条件及相应的测试结果)
完成思考题
实验一顺序表的基本操作(2学时)
一、实验目的
了解顺序表的逻辑特征,掌握顺序表的描述方法、特点及有关的概念,掌握顺序表上的插入和删除等基本操作算法。
二、实验内容
在顺序表List[]中,实现顺序表的基本操作,包括:初始化顺序表,在表中插入元素、删除元素。
基本要求:
顺序表的元素个数可随意设定;
可连续测试任意多个元素的插入、删除,(插
入、删除位置及要插入元素数值均从键盘输入);
任一操作结束后将顺序表中的内容输出;
可由用户选择退出程序。
三、实验要点及说明
顺序表又称为线性表的顺序存储结构,它是用一组地址连续的存储单元依次存放线性表的各个元素。
可按如下格式定义顺序表:
#define MAXLEN 50 /* 定义顺序表最大元素个数50 */
typedef struct{
datatype List[MAXLEN];/* 定义顺序表List */
int Num; /* 定义顺序表表长*/
}Seqlist;
模块划分:(1)initiq( )函数:初始化顺序表
(2)insertq( )函数:实现插入功能
(3)deleteq( )函数:实现删除功能
(4)print( )函数:实现输出功能
四、参考源程序
#include <>
#define MAXLEN 50
typedef int datatype;
typedef struct{
datatype List[MAXLEN];
int Num;
}Seqlist;
void initiq(Seqlist *la );
int insertq(Seqlist *la,int n);
int deleteq(Seqlist *la,int n);
int print(Seqlist *la);
void main()
{ Seqlist la;
int s,n; /* s 选择输入,n 插入或删除数据的个数*/
printf("请输入你的选择: 1---initiate 2---insert 3---delete 4---print 5---exit\nyour choice =");
scanf("%d",&s);
while(s!=5)
{ if(s==1)
{ initiq( &la );
printf("完成初始化!\n"); }
else if(s==2)
{ printf("请输入待插入的数据个数:");
scanf("%d",&n);
insertq(&la,n);
print(&la); }
else if(s==3)
{ printf("请输入待删除的数据个数:");
scanf("%d",&n);
deleteq(&la,n);
print(&la); }
else if(s==4)
{ print(&la); }
else
printf("你的选择是错误的!\n ");
printf("请输入你的选择: 1---initiate 2---insert 3---delete 4---print 5---exit\nyour choice =");
scanf("%d",&s); } }
/*初始化*/
void initiq(Seqlist *la )
{ la-> Num=0; }
/*插入*/
int insertq(Seqlist *la,int n)
{ int i,j; /* i 插入位置,j 顺序表下标*/
datatype x; /* x 插入数据*/
while(n)
{ if (la->Num>=MAXLEN-1)
{ printf ("\n 表满,不能插入!插入未完成,还有%d个数据未插入\n",n);
return 0; }
printf("请输入插入的位置和数据:");
scanf("%d%d",&i,&x);
if (i<0||i>la->Num)
{ printf ("\n 插入位置不合理!\n"); }
else
{ if (i== la->Num)
la->List[i]=x;
else
{ for ( j=la->Num; j>i; j--)
la->List[j]=la->List[j-1];
la->List[i]=x; }
la->Num++;
n--; } }
printf("插入完成\n");
return 1; }
/*删除*/
int deleteq(Seqlist *la,int n)
{ int i,j; /* i 删除位置,j 顺序表下标*/
while(n)
{ if (la->Num<=0)
{ printf ("\n 表空,不能删除!\n");
return 0; }
printf("请输入删除的位置:");
scanf("%d",&i);
if (i<0||i>=la->Num)
{ printf ("\n 删除位置错误!\n"); }
else
{ for ( j=i+1; j
la->List[j-1]=la->List[j];
la->Num--;
n--; } }
printf("删除完成!\n");
return 1; }
/*显示输出*/
int print (Seqlist *la)
{ int m;
if (la->Num<=0)
{ printf("顺序表为空!\n");
return 0; }
else
{ printf("当前的顺序表为:\n");
for(m=0;m
printf("List[%d]=%d ",m,la->List[m]);
printf("\n表长为%d\n",la->Num);
return 1; } }
五、思考题
1.设顺序表L中的数据元素按递增排列,编写一个算法,将数据元素x插入到顺序表L的适当位置上,以保持顺序表的有序性。
2.设计一算法实现删除顺序表a中第i个元素起的k个元素。
typedef struct