-
顺序表应用5:有序顺序表归并
Time Limit: 100MS Memory limit: 800K
题目描述
已知顺序表A与B是两个有序的顺序表,其中存放的数据元素皆为普通整型,将A与B表归并为C表,要求C表包含了A、B表里所有元素,并且C表仍然保持有序。输入
输入分为三行:
第一行输入m、n(1<=m,n<=10000)的值,即为表A、B的元素个数;
第二行输入m个有序的整数,即为表A的每一个元素;
第三行输入n个有序的整数,即为表B的每一个元素;输出
输出为一行,即将表A、B合并为表C后,依次输出表C所存放的元素。示例输入
5 3 1 3 5 6 9 2 4 10
示例输出
1 2 3 4 5 6 9 10
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #define maxsize 1000000
- #define LISTSIZE 100
- #define OK 1
- #define OVERFLOW -1
- typedef int element;
- typedef struct
- {
- element *elem;
- int length;
- int listsize;
- }Sq;
- int initList(Sq * L)
- {
- L->elem=(element *)malloc(maxsize*sizeof(element));
- if(!L->elem) return -1;
- L->length=0;
- L->listsize=maxsize;
- return 0;
- }
- void create(Sq * L,int k)
- {
- int i;
- for(i=0;i<k;i++)
- scanf("%d",&L->elem[i]);
- L->length=k;
- }
- void display(Sq * L)
- {
- int i;
- for(i=0;i<L->length-1;i++)
- {
- printf("%d ",L->elem[i]);
- }
- printf("%d\n",L->elem[i]);
- }
- void change(Sq *L,Sq *L1,Sq *L2)
- {
- int k=L->length +L1->length;
- int i=0,t,g=0,j=0;
- initList(L2); //�¥ï¿½ï¿½�¥�§ï¿½�¥ï¿½ï¿½
- while(i<L->length&&j<L1->length)
- {
- if(L->elem[i]<L1->elem[j])
- {
- L2->elem[g++] = L->elem[i];
- i++;
- }
- else
- {
- L2->elem[g++] = L1->elem[j];
- j++;
- }
- }
- while(i<=L->elem[i])
- {
- L2->elem[g++] = L->elem[i];
- i++;
- }
- while(j<=L1->elem[j])
- {
- L2->elem[g++] = L1->elem[j];
- j++;
- }
- L2->length = L1->length + L->length;
- }
- int main()
- {
- Sq L,L1,L2;
- int n,i,m,x;
- scanf("%d%d",&m,&x); //�¨�¾ï¿½�¥ï¿½�¥
- initList(&L);//�¥ï¿½ï¿½�¥�§ï¿½�¥ï¿½ï¿½
- initList(&L1);
- create(&L,m); //�¥ï¿½ï¿½�¥�»�º�¨�¡�¨
- create(&L1,x);
- change(&L,&L1,&L2);//�¥ï¿½ï¿½�¥�¹�¶
- display(&L2);//�¨�¾ï¿½�¥ï¿½�º
- return 0;
- }
顺序表应用5:有序顺序表归并
最新推荐文章于 2023-03-20 20:46:32 发布