顺序表的初始化、建立、求表长、输出、插入、查找、删除等操作

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值