题目地址
 https://pintia.cn/problem-sets/15/exam/problems/type/6?problemSetProblemId=725&page=0

 注意审题,返回false的时候不要返回ERROR,否则答案错误,机器规则是死的。
位置一般指数组下标,位序一般指数组下标+1。但是思路是一样的
 比如向位置1插入元素,现在L->last是5
 相当于向位序2插入元素,目前元素length有6个
但都是执行(5-1)+1 或者(6-2)+1次 即 L->last-P+1次
 这个自己列举2个例子就能推出。
 下面是个人写的代码,注释部分为我犯得错误,可以忽略,主要是本人记录学习用的
/*位置一般指数组下标,位序一般指数组下标+1*/
#define MAXSIZE 5
#define ERROR -1
typedef enum {false, true} bool;
typedef int ElementType;
typedef int Position;
typedef struct LNode *List;
typedef int Position;
typedef struct LNode *List;
struct LNode {
    ElementType Data[MAXSIZE];
    Position Last; /* 保存线性表中最后一个元素的位置 */
};
/*创建一个空的顺序表*/
List MakeEmpty()
{
	int i = 0;
	List L = (List)malloc(sizeof(struct LNode));
	for(;i<MAXSIZE;i++)
	{
		 L->Data[i]=0;
	}
	//L->Last=-1;一定要写这个,我之前不写这个就错了,-1即不合法也就是刚创建的时候赋为-1
	L->Last=-1;	
	return L;
}
/*返回顺序表中的元素X的位置(数组下标),找不到返回ERROR*/
Position Find(List L,ElementType X)
{
	int i = 0;
	//for(;i<MAXSIZE;i++)			//查找长度应该是L->Last+1次,而不是MAXSIZE
	for(;i<(L->Last+1);i++)
	{
		if(L->Data[i]==X)
			return i;
	}
	return ERROR;//这里只能写ERROR不能写false  因为题目要求
}
/*将X插入在位置P并返回true。若空间已满,则打印“FULL”并返回false;
如果参数P指向非法位置,则打印“ILLEGAL POSITION”并返回false;*/
bool Insert( List L, ElementType X, Position P )
{
	int i =0;
		/*判断空间满了就返回FULL*/
	if(L->Last == MAXSIZE-1)
	{
		printf("FULL");
		//return ERROR;
		return false;
	}
	
	//if(P<0||P>MAXSIZE-1)   MAXSIZE和L->Last不是一个东西啊,哎呦忘了
	if(P<0||P>(L->Last+1))		//也就是P=L->Last+2的时候明显不合适,因为中间的 L->Last+1这个位置空了
	{
		printf("ILLEGAL POSITION");
		//return ERROR;
		return false;
	}
	ElementType t = L->Last;
	for(i=0;i<(L->Last+1)-P;i++)
	{
		L->Data[t+1]=L->Data[t];
		t--;																	//一定要在for循环里面加t--,不然for循环相当于重复执行相同操作
	}
	L->Data[P]=X;
	L->Last++;
	return true;//一定要写这个,否则就是答案错误,这题目好蛋疼,必须按照要求来
}
/*将位置P的元素删除并返回true。若参数P指向非法位置,则打印“POSITION P EMPTY”(其中P是参数值)并返回false。*/
bool Delete( List L, Position P )
{
	int i = 0;
	if(P<0||P>=((L->Last)+1))			//这里错了
//	if(P<0||P>(L->Last))
	{
		//printf("POSITION %d EMPTY\n",P);  //不能加\n,否则提示格式不对
		printf("POSITION %d EMPTY",P);
		//return ERROR;		//题目让写false,就不能写ERROR
		return false;
	}
	for(;i<(L->Last)-P;i++)
	{
			L->Data[P]=L->Data[P+1];
			P=P+1;
	}
	L->Last--;
	return true;
}																											




















