1462 数据结构:线性表的插入

数据结构:线性表的插入
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;
}


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值