废话不多说,直接上程序
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 20
typedef int ElemType;
typedef struct
{
int length;
ElemType data[MaxSize+1];
}SqList;
//为了方便,顺序表的第一个位置不放值,也就是下标为0的
void CreateList(SqList *&L,ElemType a[],int n)
{
int i;
for(i=1;i<=n;i++)
L->data[i]=a[i];
L->length=n;
}
//初始化顺序表,向系统申请空间
void InitList(SqList *&L)
{
L=(SqList *)malloc(sizeof(SqList));
L->length =0;
}
//在有序表中加入一个数,使得表依然有序
bool InsertList(SqList *&L,ElemType e)
{
if(L->length==MaxSize)
return false;
int n=L->length+1;
L->length++;
while(n>=2 && edata[n-1])
L->data[n+1]=L->data[–n];
L->data[n]=e;
return true;
}
//输出线性表长度和元素
void ShowList(SqList *L){
printf(“表长度:%d\n表元素:”,L->length);
for(int i=1;i<=L->length;i++)
printf("%d “,L->data[i]);
printf(”\n\n");
}
void main()
{
SqList *L;
ElemType a[]={0,2,4,6,8,10,12,14};//第一个值0不用
ElemType e=20; //修改e的值可以测试不同的插入位置
InitList(L); //初始化顺序表
CreateList(L,a,7); //给顺序表初始值
ShowList(L); //输出顺序表信息
InsertList(L,e); //插入元素
ShowList(L); //输出顺序表信息
}
初始数据我们给了:2 4 6 8 10 12 14
(1)先测试一下插入表头,插入1,修改e=1
(2)插入表中,e=5
(3)插入表尾,e=20
说明:
(1)其实想要在有序表里插入数据,一般的思路特别简单:
①比较即将插入的数与原来表中的数的大小,找到插入位置(一个循环)。
②顺序表长度+1,把要插入的位置的书以及之后的数全部后移(两个循环)。
③在插入位置插入数据。
所以一般的思路需要有两个循环才能完成这个程序。
(2)本文中的程序只需一个循环即可,方便快捷,具体思路见程序即可。
**注:本程序在VC++6.0程序中成功运行,其他编程平台请自行尝试。