只能用指针还要求时间空间复杂度,是应该用链表储存吗?那个第二条要求也没看明白。可以写一下完整代码吗,谢谢。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#define DEFAULT_CAPICITY 3
#define CAPICITY_STEP 3
typedef struct _SeqList
{
char *data;
size_t size;
size_t capicity;
} SeqList;
SeqList *createSeqList()
{
SeqList *list = (SeqList *)malloc(sizeof(SeqList));
list->data = (char *)malloc(sizeof(char) * DEFAULT_CAPICITY);
list->size = 0;
list->capicity = DEFAULT_CAPICITY;
return list;
}
void destroySeqList(SeqList *list)
{
free(list->data);
free(list);
}
void reallocSeqList(SeqList *list, size_t size)
{
assert(size > list->capicity);
list->data = (char *)realloc(list->data, size);
list->capicity = size;
}
void insertSeqList(SeqList *list, size_t pos, char value)
{
assert(pos <= list->size);
if (list->size == list->capicity)
reallocSeqList(list, list->capicity + CAPICITY_STEP);
for (size_t i = list->size; i > pos; i--)
list->data[i] = list->data[i - 1];
list->data[pos] = value;
list->size++;
}
void mergeSeqList(SeqList *m1, const SeqList *m2)
{
size_t size = m1->size + m2->size;
if (size > m1->capicity)
reallocSeqList(m1, size);
char *p = m1->data + m1->size - 1;
char *q = m2->data + m2->size - 1;
char *r = m1->data + m1->capicity - 1;
while (p >= m1->data && q >= m2->data)
{
if (*p > *q)
*r-- = *p--;
else
*r-- = *q--;
}
while (p >= m1->data)
*r-- = *p--;
while (q >= m2->data)
*r-- = *q--;
m1->size += m2->size;
}
void printSeqList(const SeqList *list)
{
for (size_t i = 0; i < list->size; i++)
printf("%c,", list->data[i]);
printf("\n");
}
int main()
{
SeqList *m1 = createSeqList();
SeqList *m2 = createSeqList();
char ch;
int n, m;
scanf("%d,", &n);
for (size_t i = 0; i < n; i++)
{
scanf("%c,", &ch);
insertSeqList(m1, i, ch);
}
scanf("%d,", &m);
for (size_t i = 0; i < m; i++)
{
scanf("%c,", &ch);
insertSeqList(m2, i, ch);
}
mergeSeqList(m1, m2);
printSeqList(m1);
destroySeqList(m1);
destroySeqList(m2);
return 0;
}
$ g++ -Wall main.c
$ ./a.out
6,a,b,c,d,e,f,5,A,a,e,g,z,
A,a,a,b,c,d,e,e,f,g,z,
$ ./a.out
3,a,c,d,0,
a,c,d,
#include <iostream>
using namespace std;
typedef struct _seqlist
{
char *data;
int len;
int maxsize;
}seqlist;
void init(seqlist *sq)
{
sq->maxsize = 3;
sq->data = (char*)malloc(sizeof(char)*sq->maxsize);
sq->len = 0;
}
void release(seqlist *sq)
{
if(sq->len > 0 && sq->data != NULL)
free(sq->data);
sq->data = NULL;
sq->len = 0;
}
void insert(seqlist *sq,char c)
{
if(sq->len == sq->maxsize)
{
sq->maxsize += 3;
sq->data = (char*)realloc(sq->data,sizeof(char)*sq->maxsize);
}
int i=0;
for(i=0;i<sq->len;i++)
{
if(c<sq->data[i])
{
for(int j=sq->len;j>i;j--)
sq->data[j] = sq->data[j-1];
sq->data[i] = c;
break;
}
}
if(i==sq->len)
sq->data[sq->len] = c;
sq->len++;
}
void merge(seqlist *sq1,seqlist *sq2)
{
for(int i=0;i<sq2->len;i++)
insert(sq1,sq2->data[i]);
}
void print(seqlist *sq)
{
for(int i=0;i<sq->len;i++)
printf("%c,",sq->data[i]);
}
int main()
{
seqlist sqlist1,sqlist2;
init(&sqlist1);
init(&sqlist2);
int n;
char c;
scanf("%d,",&n);
for(int i=0;i<n;i++)
{
scanf("%c,",&c);
insert(&sqlist1,c);
}
scanf("%d,",&n);
for(int i=0;i<n;i++)
{
scanf("%c,",&c);
insert(&sqlist2,c);
}
merge(&sqlist1,&sqlist2);
print(&sqlist1);
release(&sqlist1);
release(&sqlist2);
return 0;
}