数据结构:有序顺序表里插入一个数,使得顺序表依然有序。

匿名 (未验证) 提交于 2019-12-03 00:06:01

废话不多说,直接上程序

#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]=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程序中成功运行,其他编程平台请自行尝试。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!