1454.顺序表的插入
时限:1000ms 内存限制:10000K 总时限:3000ms
描述
先读入数据建立顺序表va,表中的数据元素递增有序,再读入一个整数x,将它插入到顺序表中的适当位置,并保持顺序表的有序性。
输入
先输入一个小于100的正整数n,紧接着读入n个从小到大的正整数,建立顺序表,最后再读入一个正整数x,把它插入到顺序表中的适当位置,并保持顺序表的有序性。
输出
按顺序输出整个顺序表,输出的每个元素占一行。
输入样例
4
2 100 3000 3890
200
输出样例
2
100
200
3000
3890
#include <iostream>
#include <cstdio>
#include <cstdlib>
#define MAXSIZE 20
using namespace std;
typedef struct
{
int data[MAXSIZE];
int len;
}SeqList;
SeqList *Init_SeqList()//顺序表初始化
{
SeqList *L;
L = (SeqList*)malloc(sizeof(SeqList));
L->len=0;
return L;
}
void CreatList(SeqList **L)//建立顺序表
{
int i,n;
//printf("Input length of list:\n");
scanf("%d",&n);
//printf("Input elements of list:\n");
for(i=1;i<=n;i++)
{
scanf("%d",&(*L)->data[i]);
}
(*L)->len=n;
}
int Location_SeqList(SeqList *L,int x)//在顺序表中查找元素
{
int i=1;
while(i<L->len&&L->data[i]<x)
i++;
if(L->data[i]>=x)
return i;
else return L->len+1;
}
void Insert_SeqList(SeqList *L,int i,int x)//在顺序表中插入元素
{
int j;
if(L->len==MAXSIZE-1)
{
printf("The list is full!\n");
}
else
if(i<1||i>L->len+1)
printf("The position is invalid!\n");
else
{
for(j=L->len;j>=i;j--)
{
L->data[j+1]=L->data[j];
}
L->data[i]=x;
L->len++;
}
}
void print(SeqList *L)//顺序表的输出
{
int i;
for(i=1;i<=L->len;i++)
{
printf("%d\n",L->data[i]);
}
//printf("\n");
}
int main()
{
int i,x;
SeqList *s;
s = Init_SeqList();
CreatList(&s);
scanf("%d",&x);
i=Location_SeqList(s, x);
Insert_SeqList(s, i, x);
print(s);
return 0;
}