设顺序表中的数据元素递增有序,试着写一算法,将x插入到顺序表上的适当位置上,以保持该表的有序性。
Posted yangf428
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设顺序表中的数据元素递增有序,试着写一算法,将x插入到顺序表上的适当位置上,以保持该表的有序性。相关的知识,希望对你有一定的参考价值。
转自: https://blog.csdn.net/cckevincyh/article/details/45605261
设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性
先建立一个待插入的结点,然后依次与与链表中的各结点的数据域比较大小,找到插入该结点的位置,最后插入该结点。
算法如下:
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 20 #define OK 1 #define ERROR 0 typedef 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;
以上是关于设顺序表中的数据元素递增有序,试着写一算法,将x插入到顺序表上的适当位置上,以保持该表的有序性。的主要内容,如果未能解决你的问题,请参考以下文章
设A和B是两个按元素值递增有序的单链表,写一算法将A和B归并为按按元素值递减有序的单链表C,试分析算法的时间复杂度。(利用上篇带有头结点的线性链表操作)