实验报告1(顺序表)
4、删除操作:当需要删除第i个元素时,将原表中位置在i+1,i+2,…n-1,n上的结点,依次前移到各自的前一位置,在此之前也需要对删除位置的合法与否进行判断;
5、查找操作:(1)按内容查找:执行循环以从L->last开始扫描,直到找到需要查找的值为止;
(2)按序号查找:从顺序表的1个位置开始扫描,直到扫描到的序号=查找的序号时为止;
{
int i,n,x;
ElemType e;
Seqlist L; //定义各个变量
int t;
while(t!=0)
{
system("cls");//清屏
printf("请输入选择:\n");
printf("[1]创建线性表\n");
printf("[2]输出线性表\n");
printf("[3]插入线性表\n");
{
int j;
i=1;
printf("请输入要查找的位置:");
scanf("%d",&j);
if(j<1||j>st+1)
{
printf("查找的位置不合法!");
return 0;
}
else
{
while(i<j)
i++;
printf("查找的值为:%d",L.elem[i-1]);
return(L.elem[i-1]);
int last;
}Seqlist;
void Initseqlist(Seqlist *L)//顺序表的初始化
{
L->last=-1;
}
void CreatSeqlist(Seqlist *L,int n)//顺序表的创建
{
int i;
for(i=1;i<=n;i++)
{
scanf("%d",&L->elem[i-1]);
break;
}
case 3://线性表插入
{
Inslist(&L,i,e);
printf("插入后的线性表为:");
Outputseqlist(L);
break;
}
case 4://线性表的删除操作
{
DilList(&L,i,&x);
printf("删除后的线性表为;");
{
int i=0;
printf("请输入要查找的值:");
printf("[4]删除线性表\n");
printf("[5]按内容查找\n");
printf("[6]按序号查找\n");
printf("[7]清空线性表\n");
printf("[0]退出\n");
scanf("%d",&t);
switch(t)
{
case 1://创建线性表
{
Initseqlist(&L);
}
}
void DilList(Seqlist *L,int i,ElemType *x)//顺序表的删除
{
int j;
printf("请输入要删除的位置:");
scanf("%d",&i);
if(i<1||i>L->last+1)
printf("删除位置不合法!");
*x=L->elem[i-1];
设计分析:
1、借助于高级程序设计语言中的一维数组来表示顺序表的存储结构,一维数组的下标与元素在顺序表中的序号对应;
2、创建顺序表:将存储数据按输入顺序存入一维数组以创建顺序表;
3、插入操作:插入之前判断插入位置的合法与否以及判断表满与否,将原表中位置n,n-1,…,i上的结点,依次后移到位置n+1,n,…i+1上,空出第i个位置,然后在该位置上插入行的结点;
printf("表已满,无法插入!");
for(k=L->last;k>=i-1;k--)
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e;
L->last++;
}
int Locate(Seqlist L,ElemType e)//顺序表按内容查找
void main()//主函数
信息学院
高级语言程序设计上机实验报告
学号:134120337
姓名:王靖
班级:计科13B
实验时间:2014.10.8
实验性质:□综合性实验□设计性实验□验证实验
实验内容:顺序表创建、插入等操作
题目来源:□教材页题□教师补充□自选题目
主要功能描述:实现线性表的顺序存储,即用一组地址连续的存储单元依次存储线性表中的各个元素,使得线性表中在逻辑结构上相邻的数据元素存储在连续的物理存储单元中,在此程序中可实现顺序表的创建、查找(按内容查找、按序号查找)、插入、删除操作。
printf("请输入线性表的长度:");
scanf("%d",&n);
printf("请输入%d个数字,分别用空格隔开\n",n);
CreatSeqlist(&L,n);
printf("你创建的线性表为:");
Outputseqlist(L);
break;
}
case 2://输出线性表
{
Outputseqlist(L);
在此之前也需要对查找位置的合法与否进行判断。
典型测试数据输入:
输出:
预期结果:
2 3 4 5 6
2 9 3 4 5 6
2 3 4 5 6
2
3
程序及运行结果正误判断:□非常好□正确,还可改进□基本正确,还需改进□还有错误
不足之处或设计经验小结:
该实验在设计思路上基本正确,但在程序设计时,考虑到程序的读取速度,还可进一步改进,使该程序更简洁明了且程序运行效率提高,实现完该程序的设计后,让我对数组的概念更加清楚,且对其运用更加灵活,在此基础上,也让我知道了在程序中元素地址的重要性。
for(j=i;j<L->last+1;j++)
L->elem[j-1]=L->elem[j];
L->last--;
}
Outputseqlist(L);
break;
}
case 5://按内容查找
{
Locate(L,e);
break;
}
case 6://按序号查找
{
GetDate(L,i);
break;
任课教师评语:
教师签字:年 月 日
源程序
(1)流程图:略
(2)程序:
#include <stdio.h>
#include "stdlib.h"
#define MAXSIZE 100
typedef int ElemType;
typedef struct//定义顺序表的结构
{
ElemType elem[MAXSIZE];
}
case 7:
{
Initseqlist(&L);
break;
}
case 0:
{
break;
}
}
system("pause");//暂停
}
}//(完)
{ int k;
printf("请输入要插入的位置:");
scanf("%d",&i);
printf("\n");
printf("请输入要插入的值:");
scanf("%d",&e);
if(i<=0||i>L->last+2)
printf("输入位置不合法");
if(L->last>=MAXSIZE-1)
scanf("%d",&e);
while((i<=st)&&(L.elem[i]!=e))
i++;
if(i<=st)
{
printf("查找的值为:%d",i+1);
return (i+1);
}
else{
printf("无法查找该值!");
return -1;
}
}
int GetDate(Seqlist L,int i)//顺序表按序号查找
L->last++;
}
}
void Outputseqlist(Seqlist L)//输出线性表
{
int i;
for(i=1;i<=st+1;i++)
printf("%d ",L.e}
void Inslist(Seqlist *L,int i,ElemType e)//顺序表的插入