数据结构:线性表的插入
Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByte
Description
输入一个整数n和n个从小到大的整数,将这n个整数存放在一个线性表中。从键盘输入一个整数x,编写程序将x插入到将这个线性表的适当位置,使得线性表仍然从小到大有序。 (n不超过100)
Input
第1行为一个整数T,表示T个测试案例。
第2---第T+1行,每行第1个数为n,接下来是n个整数,然后是x。
Output
对于每一个测试案例,输出插入元素x后的线性表。
(注意:整数之间有1个空格,最后一个整数后面没有空格)
Sample Input
2
3 1 3 4 2
5 1 3 4 5 7 0
Sample Output
1 2 3 4
0 1 3 4 5 7
AC代码:
#include<iostream>
#include<cstdlib>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASSIBLE -1
#define OVERFLOW -2
using namespace std;
typedef int Status;
typedef int ElemType;
typedef int *Triplet;
ElemType *T,*p,*q;
typedef struct
{
ElemType *elem;
int length;
int listsize;
}SqList;
typedef int Status;
Status InitList_Sq(SqList &L)
{
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if (!L.elem) exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
Status ListInsert_Sq(SqList &L,ElemType e )
{ int i;
if (L.length>=L.listsize)
{
T=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if (!T) exit(OVERFLOW);
L.elem=T;
L.listsize+=LISTINCREMENT;
}
for(i=1;i<L.length;i++)
if(e<L.elem[i-1]) break;
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length]);p>=q;p--)*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
int main()
{
int m;
cin>>m;
while(m--)
{
SqList L;
ElemType elem;
int i,j=0,k=0;
int n;
cin>>n;
InitList_Sq(L);
L.length=n;
for (i=1;i<=n;i++)
cin>>L.elem[i-1];
cin>>elem;
ListInsert_Sq(L,elem);
for (i=1;i<=L.length-1;i++)
cout<<L.elem[i-1]<<" ";
cout<<L.elem[i-1];
cout<<endl;
}
return 0;
}