#include<stdio.h>
#define MAXSIZE 10
typedef int Status; //函数结构状态码 0-失败; 1-成功
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE];
int length;
}SqList;
//顺序表操作的函数声明
void InitList(SqList *LP); //顺序表的初始化
void CreateList(SqList *LP,ElemType a[],int n); //顺序表的创建
void PrintList(SqList *LP); //顺序表的输出
int ListLength(SqList *LP); //求顺序表的长度,即当前元素个数
Status ListInsert(SqList *LP,int i,ElemType e); //顺序表的插入操作,在位置i插入元素e
Status GetElem(SqList *LP,int i,ElemType *e); //顺序表的查找操作,返回第i个位置的元素值到e中
Status ListDelete(SqList *LP,int i,ElemType *e); //顺序表的删除操作,返回第i个位置的元素值到e中
int main()
{
SqList L,*SP;
int flag; //用于接收函数返回状态,0或1
ElemType result; //用于接收查找或删除的元素
int search; //查找或删除search位置的元素
ElemType arr[]={12,14,16,24,28,30,42,77};
SP=&L;
InitList(SP);
CreateList(SP,arr,8);
PrintList(SP);
printf("顺序表的当前长度是:%d\n\n",ListLength(SP));
//顺序表中插入元素
printf("在第0个位置插入25:\n");
flag=ListInsert(SP,0,25);
if(flag==1)
{
PrintList(SP);
printf("顺序表的当前长度是:%d\n\n",ListLength(SP));
}
else
{
printf("顺序表插入失败!\n");
printf("顺序表的当前长度是:%d\n\n",ListLength(SP));
}
printf("在第10个位置插入100:\n");
flag=ListInsert(SP,10,100);
if(flag==1)
{
PrintList(SP);
printf("顺序表的当前长度是:%d\n\n",ListLength(SP));
}
else
{
printf("顺序表插入失败!\n");
printf("顺序表的当前长度是:%d\n\n",ListLength(SP));
}
printf("在第11个位置插入110:\n");
flag=ListInsert(SP,11,110);
if(flag==1)
{
PrintList(SP);
printf("顺序表的当前长度是:%d\n\n",ListLength(SP));
}
else
{
printf("顺序表插入失败!\n");
printf("顺序表的当前长度是:%d\n\n",ListLength(SP));
}
//顺序表中插入元素
//顺序表中查找元素
printf("要查找第几个元素?\n");
scanf("%d",&search);
flag=GetElem(SP,search,&result);
if(flag==1)
printf("第 %d 个元素是 %d \n\n",search,result);
else
printf("顺序表查找失败!\n");
//顺序表中查找元素
//顺序表中删除元素
printf("要删除第几个元素?\n");
scanf("%d",&search);
flag=ListDelete(SP,search,&result);
if(flag==1)
printf("删除的第 %d 个元素是 %d \n\n",search,result);
else
printf("顺序表删除失败!\n");
//顺序表删除元素
return(0);
}
void InitList(SqList *LP)
{
LP->length=0;
}
void CreateList(SqList *LP,ElemType a[],int n)
{
int i;
for(i=0;i<n;i++)
{
LP->data[i]=a[i];
LP->length++;
}
}
void PrintList(SqList *LP)
{
int i;
printf("\n 顺序表中的元素为:\n");
for(i=0;i<LP->length;i++)
printf("%4d",LP->data[i]);
printf("\n\n");
}
int ListLength(SqList *LP)
{
return(LP->length);
}
/*====================================
函数功能:顺序表运算——元素的插入
函数输入:顺序表地址,插入值,插入位置
函数输出:完成标志—— 0:异常 1:正常
====================================*/
Status ListInsert(SqList *LP,int i,ElemType e)
{
int k;
if(LP->length==MAXSIZE) //顺序表已满
return 0;
if(i<1||i>LP->length+1) //插入位置i非法
return 0;
for(k=LP->length-1;k>=i;k--) //从顺序表最后一个元素开始后移
LP->data[k+1]=LP->data[k];
LP->data[i-1]=e; //讲插入的元素放入i-1中
LP->length++; //顺序表长度加1,因为插入了一个元素
return 1;
}
/*==================================================
函数功能:顺序表运算——元素的查找
函数输入:顺序表地址,查找位置,接收查找值的变量(地址)
函数输出:完成标志—— 0:异常 1:正常
==================================================*/
Status GetElem(SqList *LP,int i,ElemType *e)
{
int k;
if(LP->length==0||i<1||i>LP->length) //异常情况;空表或查找位置越界
return 0;
*e=LP->data[i-1];
return 1;
}
/*===========================================
函数功能:顺序表运算——元素的删除
函数输入:顺序表地址,删除位置,返回删除元素值
函数输出:完成标志—— 0:异常 1:正常
===========================================*/
Status ListDelete(SqList *LP,int i,ElemType *e)
{
int k;
if(LP->length==0) //顺序表为空
return 0;
if(i<1||i>LP->length) //删除位置越界
return 0;
*e=LP->data[i-1]; //获得删除的元素值
for(k=i;k<LP->length;k++)
LP->data[k-1]=LP->data[k];
LP->length--;
return 1;
}
顺序表的初始化、建立、求表长、输出、插入、查找、删除等操作
最新推荐文章于 2023-02-13 18:19:04 发布