顺序表的插入运算 NOJ1 西工大 数据结构
代码如下
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 //线性表的最大长度
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef struct
{
ElemType elem[MAXSIZE]; //线性表占用的数组空间
int last; //线性表最后一个元素在数组中的位置下标值,空表置为-1;
}SeqList;
int InsList(SeqList *LA, int i,ElemType e) //顺序表LA,插入位置i,插入元素e;
{
if (LA->last>MAXSIZE-2)
{
printf("表已满,无法插入");
return (ERROR);
}
if ((i<1)||(i>LA->last+2)) //判断插入位置是否合法
{
printf("插入位置不合法");
return (ERROR);
}
for (int k = LA->last; k >= i - 1;k--) //为插入元素而移动位置
{
LA->elem[k + 1] = LA->elem[k];
}
LA->elem[i - 1] = e;
LA->last++;
return (OK);
}
int Locate(SeqList LA,ElemType e) //线性表LA;插入元素e;查找需要插入的位置;
{
int i=LA.last;
while (LA.elem[i]>=e)
i--;
if (i<=LA.last)
return(i+2);
else
return(-1);
}
int main()
{
int e,num; //元素个数num; 插入元素e;
SeqList LA;
scanf("%d",&num);
LA.last=-1;
LA.last+=num;
for (int a=0;a<=LA.last;a++)
{
scanf("%d",&LA.elem[a]);
}
scanf("%d",&e);
Locate(LA,e);
InsList(&LA,Locate(LA,e), e);
for (int b=0;b<=LA.last;b++)
{
printf("%d ",LA.elem[b]);
}
return 0;
}