线性表(2)

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #define LIST_INIT_SIZE 100
      4 #define LISTINCREMENT  10
      5
      6 typedef struct Sqlist  {
      7     int *elem;
      8     int length;
      9     int listsize;
     10 }SqList;
     11
     12 int intlist(SqList L)
     13 {
     14     L.elem = (int *)malloc(LIST_INIT_SIZE * sizeof(int));
     15     if(!L.elem) exit(-1);
     16     L.length = 0;
     17     L.listsize = LIST_INIT_SIZE;
     18     return 0;
     19 }
     20
     21 int getelem(SqList L,int i, int e)
     22 {
     23     if(i > L.length || i < 1) return -1;
     24     int *p;
     25     p = L.elem + (i - 1);
     26     e = *p;
     27     return e;
     28 }
     29
     30 int listinsert(SqList L, int i, int e)
     31 {
     32     int *newbase = NULL;
     33     int *q,*p;
     34     if(i < 1 || i > L.length + 1) return -1;
     35     if(L.length >= L.listsize)
     36     {
     37         newbase = (int *)realloc(L.elem,(L.listsize + LISTINCREMENT)*sizeof        (int));
     38         if(!newbase) exit (-1);
     39         L.elem = newbase;
     40         L.listsize += LISTINCREMENT;
     41     }
     42     q = &(L.elem[i-1]);
     43     for(p = &(L.elem[L.length -1]); p >= q; --p)
     44         *(p + 1) = *p;
     45     *q = e;
     46     ++L.length;
     47     return *q;
     48 }
     49
     50 int listlenghth(SqList L)
     51 {
     52     if(L.length == 0)
     53         return -1;
     54     else
     55         return L.length;
     56 }
     57 int  mergelist(SqList La, SqList Lb, SqList  Lc)
     58 {
     59     intlist(Lc);
     60     int i=1,j=1;
     61     int k= 0;
     62     int ai,bj;
     63     int la_len = listlenghth(La);
     64     int lb_len = listlenghth(Lb);
     65     while((i <= la_len) && (j <= lb_len))
     66     {
     67         getelem(La,i,ai);
     68         getelem(Lb,j,bj);
     69         if(ai <= bj)
     70         {
     71             listinsert(Lc,++k,ai);
     72             ++i;
     73         }
     74         else
     75         {
     76             listinsert(Lc,++k,bj);
     77             ++j;
     78         }
     79     }
     80     while( i <= la_len )
     81     {
     82         getelem(La,i++,ai);
     83         listinsert(Lc,++k,ai);
     84     }
     85     while( j <= lb_len )
     86     {
     87         getelem(Lb,j++,bj);
     88         listinsert(Lc,++k,bj);
     89     }
     90     return Lc.length;
     91 }
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值