一、实现算法如下:
/*有序顺序表的插入*/
void InsertSqlist(Sqlist *L,Elemtype number)
{
int i;
assert(L->length < L->Listsize);
//创建表的表长大于或等于初始分配量,则无法进行插入,停止程序
for(i=L->length;i>0&&L->elem[i-1]>number;i--)
L->elem[i]=L->elem[i-1];
L->elem[i]=number;
L->length++;
}
二、完整程序代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#define INIT_SIZE 100 /*顺序表初始分配量*/
typedef int Elemtype;
typedef struct {
Elemtype *elem; //顺序表存储空间基地址
int length; //顺序表当前表长
int Listsize; //顺序表存储容量
}Sqlist;
/*顺序表初始化*/
void InitSqlist(Sqlist *L)
{
L->elem=(Elemtype*)malloc(sizeof(Elemtype)*INIT_SIZE);
assert(L->elem != NULL); //分配初始存储空间失败,停止程序
L->length=0; //顺序表当前表长为0
L->Listsize=INIT_SIZE;
}
/*有序顺序表的创建*/
void CreateSqlist(Sqlist *L)
{
int i,n;
printf("请输入顺序表表长:\n");
scanf("%d",&n);
fflush(stdin);
assert(n <= L->Listsize); //创建表的表长大于初始分配量,停止程序
L->length=n;
printf("请输入有序顺序表各元素:\n");
for(i=0;i<n;i++)
{
scanf("%d",&L->elem[i]);
}
}
/*有序顺序表的插入*/
void InsertSqlist(Sqlist *L,Elemtype number)
{
int i;
assert(L->length < L->Listsize);
//创建表的表长大于或等于初始分配量,则无法进行插入,停止程序
for(i=L->length;i>0&&L->elem[i-1]>number;i--)
L->elem[i]=L->elem[i-1];
L->elem[i]=number;
L->length++;
}
/*顺序表的输出*/
void PrintSqlist(Sqlist *L)
{
int i;
for(i=0;i<L->length;i++)
printf("%d ",L->elem[i]);
}
int main()
{
Elemtype number;
Sqlist L;
InitSqlist(&L);
CreateSqlist(&L);
printf("请输入插入元素的数据:\n");
scanf("%d",&number);
InsertSqlist(&L,number);
printf("插入后的顺序表为:\n");
PrintSqlist(&L);
return 0;
}
三、运行效果截图: