#include <iostream>
using namespace std;
#define Elemtype char
#define maxSize 100
#define initSize 10
#define Equal 0
#define Bigger 1
#define Smaller -1
typedef struct {
Elemtype *data;
int length;
int size;
}heapString;
void initHeapString(heapString &S) {
S.data = new Elemtype[initSize];
S.length = 0;
S.size = initSize;
}
void assignmentHeapString(heapString &S, Elemtype a[], int length) {
for(int i = 1; i < 10; i ++) {
if(S.size > length) break;
else {
S.data = (Elemtype *) realloc (S.data, (i + 1)*initSize*sizeof(Elemtype));
S.size += 10;
}
}
for(int i = 0; i < length; i ++) {
*(S.data + i) = a[i];
}
S.length = length;
}
bool mergeHeapString(heapString &S, heapString S1, heapString S2) {
int allLength = (S1.length + S2.length);
if(allLength > maxSize) return false;
else {
int times = allLength / 10;
if(allLength % 10 == 0) times --;
else {}
initHeapString(S);
int i = times;
while(i --) {
S.data = (Elemtype *) realloc (S.data, (times - i) * initSize * sizeof(Elemtype));
S.size += 10;
}
for(int i = 0; i < S1.length; i ++) {
S.data[i] = S1.data[i];
}
for(int i = S1.length; i < S1.length + S2.length; i ++) {
S.data[i] = S2.data[i - S1.length];
}
S.length = allLength;
return true;
}
}
void outputHeapString(heapString S) {
for(int i = 0; i < S.length; i ++) {
cout << S.data[i];
}
cout << endl;
}
int main() {
heapString S;
Elemtype a[] = "1234567890123";
initHeapString(S);
assignmentHeapString(S, a, 13);
outputHeapString(S);
cout << S.size << " " << S.length << endl;
heapString S1, S2;
initHeapString(S1);
initHeapString(S2);
assignmentHeapString(S1, "234565656", 9);
assignmentHeapString(S2, "asdfgjijij", 10);
mergeHeapString(S, S1, S2);
outputHeapString(S);
cout << S.size << " " << S.length << endl;
return 0;
}