设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性

来源:互联网 发布:获取客户端的mac地址 编辑:程序博客网 时间:2024/04/30 15:17

设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性
先建立一个待插入的结点,然后依次与与链表中的各结点的数据域比较大小,找到插入该结点的位置,最后插入该结点。
算法如下:

#include<stdio.h>#include<stdlib.h>#define MAXSIZE 20#define OK 1#define ERROR 0typedef int ElemType;typedef int Status;typedef struct{    ElemType data[MAXSIZE];    int Length;}SqList;Status InitList(SqList * L)   //初始化线性表{    L->Length=0;    return OK;}SqList Create(SqList * L,ElemType Number){    int StartNumber,Step;    printf("请输入初始值和步长:\n");    scanf("%d%d",&StartNumber,&Step);    for(int i=0;i<Number;i++)    {        L->data[i]=StartNumber+(i)*Step;    }    L->Length=Number;    return *L;}void print(SqList *L){    for(int i=0;i<L->Length-1;i++)    {        printf("%d ,",L->data[i]);    }    printf("%d",L->data[L->Length-1]);    printf("\n");}//判断插入位置Status Locate(SqList *L,ElemType e){    if(e<L->data[0])    {        return 0;    }    if(e>L->data[L->Length-1])    {        return L->Length;    }    else    {        for(int i=0;i<L->Length;i++)        {            if(e>=L->data[i] && e<L->data[i+1])            {                return i+1;            }        }    }}//插入Status InorderList(SqList *L,ElemType Location,ElemType e){    for(int i=L->Length-1;i>=Location;i--)    {        L->data[i+1]=L->data[i];    }    L->data[Location]=e;    L->Length++;    return OK;}int main(){    SqList L;    InitList(&L);    int Number;    printf("输入顺序表的元素个数:\n");    scanf("%d",&Number);    Create(&L,Number);    print(&L);    printf("请输入插入的元素:\n");    int InputNumber;    scanf("%d",&InputNumber);    int Location=Locate(&L,InputNumber);    InorderList(&L, Location,InputNumber);    print(&L);    return 0;}

运行结果

0 0
原创粉丝点击