顺序表的基本操作_顺序表基本操作上机实验
一、实验目的
理解线性结构的基本概念,掌握两种基本的存储结构:顺序存储结构(顺序表)和链式存储结构(单链表);用C语言实现在两种存储结构上的对应操作(包括创建、删除插入元素、遍历等),巩固强化C程序设计的基本方法和能力。
二、实验内容
完成顺序表的创建、元素删除、遍历等操作,具体内容如下:
有序的一组整数{1,2,3,4,6},设计顺序表并实现以下操作:
A.初始化一个空的顺序表;
B.从键盘依次输入上述数据添加到顺序表中;
C.删除表中的第四个数据元素;
D.显示B、C操作后顺序表中的内容。
#include <stdio.h>
#define ListSize 100 //表空间的大小
typedef int DataType;//数据类型
typedef int Status;
//定义顺序表结构体
typedef struct
{
DataType data[ListSize]; //数据域
int length; //当前的表长度
}SqListNode,*SqList;
//顺序表的初始化
void InitSqList(SqList L)//顺序表的初始化即将表的长度置为0
{
L->length=0;
}
Status Delete(SqList L,int i)
{
int j;
if(L->length==0)
return 0;
for(j=i;j<L->length;j++)
{
L->data[j-1]=L->data[j];
}
L->length--;
return 1;
}
int Insert_SL(SqList L,int i,DataType x)//按位置插入数据,i-指定插入位置(i前面插入),x-插入值
{
int j;
if (L->length >= ListSize)//判断表空间溢出
{
printf("表空间溢出n");
return 0;
}
if(i<1 || i>ListSize)//检验插入元素是否合法
{
printf("插入位置:%d不合法!n",i);
return 0;
}
else
{
for(j=L->length-1;j>=i-1;j--)//数组元素后移,为插入元素空出位置
{
L->data[j+1]=L->data[j];
}
L->data[i-1]=x;//插入数据元素
L->length++;//表长加1
}
return 1;
}
int SqListPrint(SqList L)//打印顺序表
{
int i;
if(L->length==0)
{
printf("顺序表为空n");
return 0;
}
printf("顺序表:n");
for(i=0;i<L->length;i++)
printf("%d ",L->data[i]);
printf("n");
return 1;
}
int main()
{
int i;int num=5;
int delete_location;//删除位置
int isDeleted;//判断是否删除成功
DataType x;
SqListNode L,*lp=&L;
InitSqList(lp);//表的初始化
for(i=1;i<=num;i++)//录入数据
{
printf("输入第%d个元素:",i);
scanf("%d",&x);
if(Insert_SL(lp,i,x)!=1)
return 0;
}
SqListPrint(lp);//打印顺序表
printf("请输入您要删除的位置:");
scanf("%d",&delete_location);
printf("n");
isDeleted=Delete(&L,delete_location);
if(isDeleted){
printf("n");
SqListPrint(lp);//打印顺序表;
}
return 1;
}