有序线性表从大到小排列,西安插入一个数,插入后的线性表依然是有序线性表。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#define Max 100 // 定义数组的最大长度
typedef int Datatype; // 定义数组元素的数据类型
typedef struct
{
Datatype data[Max]; // data数组用于开辟一段连续的存储空间
int length; // 当前长度
}SqList;
int Inet(SqList *L,Datatype x)
{
int i,j;
if (L->length >= Max)
{
printf("overflow!");
return 0;
}
for (i = 0;i < L->length;i++)
{
if(x >= L->data[i])
{
for(j = L->length;j >= i;j--)
L->data[j + 1] = L->data[j]; // 结点后移
L->data[i] = x;
L->length++;
return 1;
}
}
L->data[L->length++] = x;
return 1;
}
void main()
{
SqList L;
Datatype x,a;
int i;
L.length=0;
printf("请从大到小输入线性表,以0结束:\n");
for(i = 0;i < Max;i++)
{
scanf("%d",&a);
if(a==0)
break;
L.data[i] = a;
L.length++;
}
printf("原线性表为:\n");
for(i = 0;i < L.length;i++)
printf("%d ",L.data[i]);
printf("\n线性表长度为:%d\n\n",L.length);
printf("输入插入数据x:");
scanf("%d",&x);
Inet(&L,x);
printf("\n插入后的线性表为:");
for(i = 0;i < L.length;i++)
printf("%d ",L.data[i]);
printf("\n插入后的线性表长度为:%d\n\n",L.length);
}
运行结果如下图: