顺序表非递减顺序合并

Posted 夏午晴天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺序表非递减顺序合并相关的知识,希望对你有一定的参考价值。

  1 #include <bits/stdc++.h>
  2 using namespace std;
  3 #define MAXSIZE 100
  4 /**
  5  * 实验一 (1)
  6  * @author Unchangedman
  7  */
  8 typedef int ElemType;
  9 
 10 typedef struct
 11 {
 12     ElemType data[MAXSIZE];
 13     int length;
 14 }SqList;
 15 
 16 void InitList(SqList &sq)
 17 {
 18     sq.length = 0;
 19 }
 20 
 21 int GetLength(SqList sq)
 22 {
 23     return sq.length;
 24 }
 25 
 26 int GetElem(SqList sq,int i,ElemType &e)    /*求线性表中第i个元素*/
 27 {
 28     if (i < 1 || i > sq.length)        /*无效的i值*/
 29         return 0;
 30     else
 31     {
 32         e = sq.data[i-1];
 33          return 1;
 34     }
 35 }
 36 
 37 int InsElem(SqList &sq,ElemType x,int i) /*插入元素*/
 38 {
 39        if (i<1 || i>sq.length+1)            /*无效的参数i*/
 40            return 0;
 41        for (int j = sq.length; j >= i; j--)            /*将位置为i的结点及之后的结点后移*/
 42            sq.data[j] = sq.data[j-1];
 43     sq.data[i-1] = x;                   /*在位置i处放入x*/
 44        sq.length++;                        /*线性表长度增1*/
 45     return 1;
 46 }
 47 
 48 void PrintList(SqList &sq)
 49 {
 50     for(int i = 1; i <= sq.length; i++)
 51     {
 52         cout << sq.data[i - 1] << endl;
 53     }
 54     cout << endl;
 55 }
 56 
 57 void commonToC(SqList A, SqList B, SqList &C)
 58 {
 59     int i = 1, j = 1;
 60     int k = 0;
 61     
 62     int lena = GetLength(A), lenb = GetLength(B);
 63     ElemType a, b;
 64     while((i <= lena) && (j <= lenb))
 65     {
 66         GetElem(A,i,a);
 67         GetElem(B,j,b);
 68 
 69         if (a <= b)
 70         {
 71             InsElem(C,a,++k);
 72             ++i;
 73         }
 74         else{
 75             InsElem(C,b,++k);
 76             ++j;
 77         }
 78     }
 79     while(i <= lena)
 80     {
 81         GetElem(A,i++,a);
 82         InsElem(C,a,++k);
 83     }
 84     while(j <= lenb)
 85     {
 86         GetElem(B,j++,b);
 87         InsElem(C,b,++k);
 88     }
 89 }
 90 
 91 void commonAB(SqList &A, SqList B)
 92 {
 93     for(int i = 1; i <= GetLength(B); i++)
 94     {
 95         ElemType e;
 96         GetElem(B,i,e);
 97         int flag = 1;
 98         for(int j = 1; j <= GetLength(A); j++)
 99         {
100             ElemType a;
101             GetElem(A,j,a);
102             if(e <= a)
103             {
104                 InsElem(A,e,j);
105                 flag = 0;
106                 break;
107             }
108         }
109         if(flag)
110             InsElem(A,e,GetLength(A) + 1);
111     }
112 }
113 int main()
114 {
115     SqList A,B,C;
116     InitList(A);  /*初始化顺序表sq*/
117     InitList(B);  /*初始化顺序表sq*/
118     InitList(C);  /*初始化顺序表sq*/
119     
120     InsElem(A,3,1);//插入数据
121     InsElem(A,5,2);
122     InsElem(A,8,3);
123     InsElem(A,11,4);
124     cout << "A: " << endl;
125     PrintList(A);//打印表 A
126 
127     InsElem(B,2,1);//插入数据
128     InsElem(B,6,2);
129     InsElem(B,8,3);
130     InsElem(B,9,4);
131     InsElem(B,11,5);
132     InsElem(B,15,6);
133     InsElem(B,20,7);
134     cout << "B: " << endl;
135     PrintList(B);//打印表 B
136 
137     /*
138         A 和 B表合并到C表
139         元素值按非递减排列
140      */
141     commonToC(A,B,C);
142     cout << "C :" << endl;
143     PrintList(C);
144 
145     /*
146         A 和 B表合并到A表
147         元素值按非递减排列
148      */
149     cout << "A: " << endl;
150     commonAB(A,B);
151     PrintList(A);
152     return 0;
153 }

 

以上是关于顺序表非递减顺序合并的主要内容,如果未能解决你的问题,请参考以下文章

合并顺序表

88. 合并两个有序数组

88. 合并两个有序数组

LeetCode:合并两个有序数组

Leetcode数据结构算法题合并两个有序数组(顺序表篇)

LeetCode:合并两个有序数组