顺序表的增删查操作

#include <stdio.h>
#include <stdlib.h>

#define MaxSize 50
typedef int ElemType;
//静态分配
typedef struct{
	ElemType data[MaxSize];
	int length;
}SqList;
//动态分配
#define InitSize 100
typedef struct{
	ElemType *data;
	int capacity;//动态数组的最大容量
	int length;
}SeqList;
//i代表插入的位置,从1开始
bool ListInsert(SqList &L,int i,ElemType e)
{
	if(i<1||i>L.length+1)//判断要插入的位置是否合法
		return false;
	if(L.length>=MaxSize)
		return false;
	for(int j=L.length;j>=i;j--)//移动顺序表中的元素
		L.data[j]=L.data[j-1];
	L.data[i-1]=e;//数组下标从零开始,插入第一个位置,访问的下标为0
	L.length++;
	return true;
}
//删除使用元素e的引用的目的是拿出对应的值
bool ListDelete(SqList &L,int i,ElemType &e)
{
	if(i<1||i>L.length)//如果删除的位置是不合法
		return false;
	e=L.data[i-1];//获取顺序表中对应的元素,赋值给e
	for(int j=i;j<L.length;j++)
		L.data[j-1]=L.data[j];
	L.length--;//删除一个元素,顺序表长度减1
	return true;
}
//查找成功,返回位置,位置从1开始,查找失败,返回0
int LocateElem(SqList L,ElemType e)
{
	int i;
	for(i=0;i<L.length;i++)
		if(L.data[i]==e)
			return i+1;//加1就是元素在顺序表中的位置
	return 0;
}
//打印顺序表元素
void PrintList(SqList &L)
{
	for(int i=0;i<L.length;i++)
	{
		printf("%4d",L.data[i]);
	}
	printf("
");
}
int main()
{
	SqList L;//顺序表的名称
	bool ret;//查看返回值
	ElemType del;//要删除的元素
	//首先手动在顺序表中赋值
	L.data[0]=1;
	L.data[1]=2;
	L.data[2]=3;
	L.length=3;//总计三个元素
	ret=ListInsert(L,2,60);
	if(ret)
	{
		printf("插入成功
");
		PrintList(L);
	}else{
		printf("插入失败
");
	}
	ret=ListDelete(L,1,del);
	if(ret)
	{
		printf("删除成功
");
		printf("删除元素值为 %d
",del);
		PrintList(L);
	}else{
		printf("删除失败
");
	}
	ret=LocateElem(L,60);
	if(ret)
	{
		printf("查找成功
");
		printf("元素位置为 %d
",ret);
	}else{
		printf("查找失败
");
	}
	system("pause");//停在控制台窗口
}
原文地址:https://www.cnblogs.com/buxiu888/p/14519504.html